我把我用atl写的com拿到 vs.net 2003下编译时出现以下错误:
C1001: 内部编译器错误
(编译器文件“msc1.cpp”的第 2701 行)
。请选择 Visual C++
“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件获得详细信息
但错误都定位到系统的头文件里,
这个项目的文件肯定没有问题,在vc 6.0和vc.net 2002里都通过了,请问有没有人知道怎么解决??~~
C1001: 内部编译器错误
(编译器文件“msc1.cpp”的第 2701 行)
。请选择 Visual C++
“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件获得详细信息
但错误都定位到系统的头文件里,
这个项目的文件肯定没有问题,在vc 6.0和vc.net 2002里都通过了,请问有没有人知道怎么解决??~~
解决方案 »
- 关于new动态分配内存
- char 型 如 何 转 变 成 double型??????
- 想在程序中作一个画面以显示数据的变化,用Modeless Dialog作成,加上一个Picture控件好吗,请指教!
- 如何让对话框一创建就隐藏?
- 提问:如何获得记事本中光标所在的位置,包括行和列?
- 因CSDN要进行改版,发布软件一 ---- 可下载CSDN自9月份以来的所有帖子,详情请进!!!
- 请教大侠使用Kodak图象编辑器控件的问题,帮帮我吧,我快急死了!谢谢了!
- 怎样判断用户在 treectrl的item上右击?
- 迷茫
- 关于图像采集卡将图像帧数据怎样传输给内存??谢谢
- 程序中的鼠标图象与实际点击位置不一致,该怎么办
- 关于硬件扫描......
如果你这个cpp设置为使用预编译,那么你就得把#include "stdafx.h"放在最前面,反过来,如果你不使用预编译,不能包含"stdafx.h"。
估计是预编译设置的问题。
如果你这个cpp设置为使用预编译,那么你就得把#include "stdafx.h"放在最前面,反过来,
如果你不使用预编译,不能包含"stdafx.h"。
*******************************************************************************如果是预编译的问题,那么出错信息将不会是C1001,会提示用户预编译不对头。
(编译器文件 file,第 number 行)编译器无法生成正确的构造代码,原因可能是出自表达式与优化选项的组合。尝试移除一个或多个优化选项,并重新编译包含错误信息所指示的行的函数。
以下是MSDN的说明,但问题是我根本就没有开任何的优化选项。
通过移除一个或多个优化选项有可能解决该问题。若要确定哪一个选项出了问题,请一次移除一个选项并重新编译,直到错误信息消失为止。通常最有可能导致此错误的选项有 /Og、/Oi 和 /Oa。确定了哪一个选项是症结所在后,则可以对发生错误的函数使用 optimize 杂注来禁用它,并为模块的其余部分继续使用该选项。尝试重写报告错误的行或围绕该行周围的若干行。如果这不起作用,请与 Microsoft 产品支持服务联系。
我相信不会是vc的bug,一定是别的地方没有做好,理论上只要是语法合适的cpp文件,肯定可以编译。
安装2003并不需要2002的盘。VS上的bug也不是一个两个的事, 只不过编译器上出bug比较少而以
怎么回事呀。
你还是先学一下用VS再说吧,编译时cl内部错误,又何来跟踪调试???to lygfqy(风清扬):
我也认为是编译选项的问题,不过我以经找他改成和2002一样还不行::我试了一下,在用了atl的项目里,如果像以下这样的代码就不能通过:
template <typename T>
class Cobj
{
public:
T AA(void);
};
template<typename T>
inline T Cobj::AA()
{
.........................//用到了ATL Collection里面的东西,不用有时能通过
}
改成以下时又能通过:
template <typename T>
class Cobj
{
public:
inline T AA()
{
.........................//用到了ATL Collection里面的东西,不用有时能通过
};
};
template <typename T>
class Cobj
{
public:
T AA(void);
};
template<typename T>
inline T Cobj::AA()
{
.........................//用到了ATL Collection里面的东西,不用有时能通过
}
本来就错误,正确的语法是:
template<typename T>
inline T Cobj<T>::AA()
{
.........................//用到了ATL Collection里面的东西,不用有时能通过
}
我一直用得挺好。
我想你应该知道编译器内部错误和语法错误的区别吧
出错的原因很多,往往是不小心没有注意到某些小节而造成。许多头文件是相关的,它们的次序不能颠倒,把某些头文件放在预编译头文件里面是强制它在相对最前面的位置,你不放也可以解决这个问题。另外,有时候还得注意编译开关,名字空间,以及class, function相互引用的问题,它们也决定了头文件的次序。
总之,你把每个obj单独看待,细心一点就很容易发现问题的所在了。