编译没有Visual C ++的c ++ Visual C ++ 7.1解决方案

时间:2011-07-19 05:29:06

标签: c++ winapi mfc

我需要构建一个可视化的c ++解决方案(.dsp VC ++ 7.1),该解决方案是由其他人在2005年编写的。我正在尝试在VS2010试用版中编译解决方案,但它给了我一些错误,如下所述:< / p>

error C3867: 'CServerSocket::SelfDestruct': function call missing argument list; use '&CServerSocket::SelfDestruct' to create a pointer to member
error C2039: 'iterator_category' : is not a member of 'CommandDispatchInserter' c:\program files\microsoft visual studio 10.0\vc\include\xutility
error C2146: syntax error : missing ';' before identifier 'iterator_category'   c:\program files\microsoft visual studio 10.0\vc\include\xutility
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\program files\microsoft visual studio 10.0\vc\include\xutility
error C2602: 'std::iterator_traits<_Iter>::iterator_category' is not a member of a base class of 'std::iterator_traits<_Iter>'  c:\program files\microsoft visual studio 10.0\vc\include\xutility

从我的调查看来,从VS2005开始,各种库的不同实现导致错误,我认为代码完全不符合标准,这也是一个因素。而不是修改代码以适应VS的要求(我对此无能为力)我想知道是否有一种方法来编译这个i nit的当前状态,而不是安装VS2003的实例。我尝试过使用minGW for windows但没有运气。它似乎不喜欢MFC库。有没有人对最有成效的路线有任何建议?

提前致谢

3 个答案:

答案 0 :(得分:3)

第一个错误(函数调用缺少参数列表;使用'&amp; CServerSocket :: SelfDestruct')是VS2003和VS2005之间编译器的更改,以更符合标准。据我所知,这里唯一的解决方案是修改代码,如消息所示。我们几年前升级VS时遇到过几起这样的情况;修复它们并不难。

我认为你不能在不修改代码的情况下在VS2010下编译它。我会一个接一个地修理它们;当然,似乎其他四个错误都是连在一起的,如果你弄清楚它有什么问题,那么它可能不需要太多的修改。发布导致它的代码将有助于我们其他人。

答案 1 :(得分:1)

对于第一期,请使用&amp;显式地获取指向成员的指针。没有其他方法可以使用VS9或10进行编译。这是一个易于添加的机械方法,需要很少的C ++知识。

第二个问题是,我认为你错过了某个'typename'限定符。这更难,如果你不了解C ++,你只能做很少的事情。修复&amp;发布第一个和后期编译器日志和代码以获得更好的答案。

至于你的实际问题,没有办法让这个用VS的新版本编译;有一些“向后兼容性”编译器设置,但这些问题不在其中。你也不能使用除Visual Studio之外的任何编译器编译MFC代码,因此MingW路径无法花费更多时间。

所以,你的选择是:

  • 返回Visual Studio 2003.简单。
  • 修复代码。需要C ++知识和/或多次访问此站点。不那么容易。
BTW,.dsp不是Visual Studio 7.1,它是Visual Studio 6.如果是这样,你就更加困惑了,因为从那以后的变化比自7.1(2003)以来的大很多

答案 2 :(得分:0)

通过搜索MSDN中的错误代码,您可以获得有关编译器错误的基本原理的详细信息,例如。如果声明的函数没有显式返回类型,则会发生C4430。 Visual C ++ 6在这里假设int,以后的版本将无法编译。

有关MSDN中的详细信息,请参阅here - 其他错误代码搜索(在本例中为字符串C4430)也可以使用。

  

由于编译器一致性工作,可能会生成此错误   这是为Visual C ++ 2005完成的:所有声明都必须明确   指定类型;不再假设int。