编译c++ Visual c++ 7.1解决方案,不含Visual c++

Compiling c++ Visual C++ 7.1 solution without Visual C++

本文关键字:c++ Visual 不含 解决方案 编译      更新时间:2023-10-16

我需要构建一个可视化的c++解决方案。dsp vc++ 7.1),这是别人在2005年写的。我试图在VS2010试验中编译解决方案,但它给了我一些错误,如下所述:

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 filesmicrosoft visual studio 10.0vcincludexutility
error C2146: syntax error : missing ';' before identifier 'iterator_category'   c:program filesmicrosoft visual studio 10.0vcincludexutility
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:program filesmicrosoft visual studio 10.0vcincludexutility
error C2602: 'std::iterator_traits<_Iter>::iterator_category' is not a member of a base class of 'std::iterator_traits<_Iter>'  c:program filesmicrosoft visual studio 10.0vcincludexutility

从我的调查来看,从VS2005开始,各种库的不同实现导致了错误,我认为代码相当不符合标准,这也是一个因素。而不是修改代码,以适应VS的要求(我是相当无能为力的做),我想知道是否有一种方法来编译这个I单元的当前状态,短安装VS2003的实例。我曾尝试使用minGW的窗口,但没有运气。它似乎不喜欢MFC库。谁有什么最有效的建议?

Thanks in advance

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

我不认为你将能够在VS2010下编译这个而不修改代码。我会一个接一个地修复它们;当然,其他四个错误似乎都是联系在一起的,如果你知道哪里出了问题,可能不需要太多的改变来修复。把导致这种情况的代码贴出来会对我们其他人有所帮助。

第一期,使用&显式接受指向成员的指针。没有其他方法可以让它在VS9或10中编译。这是一个机械的东西,很容易添加,几乎不需要c++知识。

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

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

所以,你的选项是:

    返回到Visual Studio 2003。容易。修复代码。c++知识和/或需要多次访问本网站。可没那么容易。

BTW, .dsp不是Visual Studio 7.1,它是Visual Studio 6。如果是这样,你就完蛋了,因为从那时起的变化比7.1(2003)以来的变化要大得多。

您可以通过在MSDN中搜索错误代码来获得有关编译器错误原因的详细信息,例如:当你声明一个没有显式返回类型的函数时,就会发生C4430。Visual c++ 6假定此处为int,以后的版本将无法编译。

查看MSDN中的详细信息-其他错误代码搜索(在本例中是字符串C4430)也可以工作。

此错误可能是编译器一致性工作的结果这是Visual c++ 2005所做的:所有声明都必须显式地指定类型;