2011-07-19 84 views
2

我需要构建一个由其他人在2005年编写的visual C++解决方案(.dsp VC++ 7.1)。我试图编译VS2010试用版中的解决方案,但它是给我一些错误概述如下:在没有Visual C++的情况下编译C++ Visual C++ 7.1解决方案

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库。有没有人对最有生产力的路线有任何建议?

在此先感谢

+0

发布报告这些错误的代码会有所帮助。 –

+0

只有两个错误。修复它们。 –

回答

1

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

第二个问题是,我认为你在某个地方缺少'typename'限定符。这很难,如果你不了解C++,你只能做很少的事情。首先修复&问题,并发布编译器日志和代码以获得更好的答案。

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

所以,你的选择是:

  • 返回到Visual Studio 2003中容易。
  • 修复代码。需要C++知识和/或许多到这个网站的旅行。不那么容易。

BTW,.DSP不是的Visual Studio 7.1,它的Visual Studio 6.如果是的话,你就更加拧紧,因为自那以后的变化是很多从1995年起7.1(2003)更大。

+0

最终它回到了VS 2003.有点痛苦,但它做到了!谢谢 – Grub

3

的第一个错误(函数调用缺少参数列表;使用“& CServerSocket ::自毁”)是在VS2003和VS2005的编译器之间的变化是与标准更柔顺。据我所知,这里唯一的解决方案是根据消息的建议修改代码。我们在几年前升级VS时遇到过这种情况,解决它们并不难。

我不认为你将能够在VS2010下编译这个,而不用修改代码。我会开始逐个修复它们;它肯定看起来像其他四个错误都链接在一起,如果你发现有什么问题,那么它可能不需要太多的修改来修复。发布导致它的代码会帮助我们其他人。

+0

是的,不能从Visual C++ 6编译后升级的代码并不少见,因为所有后来的Visual C++编译器都越来越服从适当的标准,这是1998年正在进行的一项工作。大多数情况下,只需要修复编译错误,它会运行干净。 –

0

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

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

可以为编译器一致性工作 的结果是为Visual C++ 2005做会生成此错误:所有声明必须明确 指定类型; int不再被假设。

相关问题