ICE源代码编译出错及问题的解决

下载ICE源代码后,解压至C盘,直接双击打开all.dsw,然后遵照vs.net IDE的提示,把所有项目文件转换为.net下的solution及vcproj文件。然后build->build solution。

至此一切如常,然后在编译到ICE这个项目时,到了router.cpp文件时报错,错误显示如下:

c:/Ice-2.1.0/src/Ice/Router.cpp(408): error C2059: syntax error : '.'

......

仔细检查,没发现什么大碍,ice源程序的c++语法肯定没问题,该引用的头文件也都有了。

于是找到第一个报错的地方,把该方法以后的所有代码全部注释掉,该方法之类的其余代码也尽可能注释。出错处代码如下:

::IceInternal::Outgoing __out( __connection.get(), __reference.get(), __operation, static_cast< ::Ice:: OperationMode >(1), __context, __compress );

bool __ok =__out.invoke();

在第二句调用__out.invoke()时编译报错,注释此句后再编译一切正常。

尝试把__out改为_out,调用_out.invoke()一切正常,于是开始怀疑是此变量名有问题。改为__out1也正常。

因为__out是在一个方法之内定义的,即是一个局部变量,那么即使与全局变量或是该类里的实例或类变量重名,也不会受影响。google搜索__out, 发现有类似#define __out的语句存在,豁然开朗,应该是有宏与__out重名,打开vc.net的tools->options->projects->vc++ directories观察include files把几个怀疑对象去掉,重新编译,全部通过。最终确定有问题的include files目录为C:/Program Files/Microsoft Platform SDK for Windows XP SP2/Include/


版权声明:本文为race原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。