fatal error C1001

本文解决了使用VS2005编译过程中出现的内部错误问题,通过对特定代码片段进行重构,成功避免了编译器错误。
http://blog.sina.com.cn/explorer101

 

    下午用VS 2005编译一个程序,碰到编译器出错了,(难怪外界对VS 2005恶评不少):

1>d:\3d_highspec\3d_sim\code\trunk\3d_sim\sysui\iapplication.cpp(323): fatal error C1001: 编译器中发生内部错误。

1>(编译器文件“F:\SP\VCTOOLS\Compiler\CxxFE\sl\P1\C\toil.c”,第7954 行)

1> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。

 

出错的代码如下:

typedef CRuntimeClass* (__stdcall *GET_RUNTIMECLASS)();

GET_RUNTIMECLASS lpfnDLLProc = (GET_RUNTIMECLASS)::GetProcAddress(pStandViewDocMod->GetModuleHandle(),"GetDocumentRuntimeClass"); // 提示出错行

return lpfnDLLProc();

 

我仔细检查了代码,没发现语法方面的错误。网上说没装VS 2005 sp1出错的,但是我已经装了啊!还有一种解决办法是在出错信息中找到出错时正在编译的那个cpp 文件的名字,把它记下来;在FileView 窗口中的 source files下新建一个子文件夹,把刚才记住的 cpp 文件移动到这个文件夹中;然后再次编译。但是我试过,无效。重新编译整个工程也无效。

 

接着我试着分析编译器出错的原因。编译器编译时出错,一种可能是这个语句比较复杂而导致编译器它在进行语法分析无法分析出来而导致出错(类似的情形是人想一个很复杂的问题想疯一样)。因此一个解决思路是尽量把这行代码化简好让编译器分析。于是我试着把代码改为:

     HMODULE hModule = pStandViewDocMod->GetModuleHandle();

       GET_RUNTIMECLASS lpfnDLLProc = (GET_RUNTIMECLASS)::GetProcAddress(hModule,"GetDocumentRuntimeClass");

       return lpfnDLLProc();

 

   结果一改顺利编译通过。看来解决这种错误可以遵循这种思路来进行!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值