我有一个奇怪的问题,当我在Qt桌面应用程序中包含从QtNetwork模块到Qt Desktop应用程序中的任何内容时,甚至在使用所包含的任何内容之前,我都会收到一堆错误。例如,如果我包含QtNetwork/QHostAddress,我会得到以下错误:
..\..\QtSDK\Desktop\Qt\4.8.1\mingw\include/QtNetwork/qabstractsocket.h:66: error: template with C linkage
..\..\QtSDK\Desktop\Qt\4.8.1\mingw\include/QtNetwork/qabstractsocket.h:253: error: declaration of C function 'QDebug operator<<(QDebug, QAbstractSocket::SocketState)' conflicts with
..\..\QtSDK\Desktop\Qt\4.8.1\mingw\include/QtNetwork/qabstractsocket.h:252: error: previous declaration 'QDebug operator<<(QDebug, QAbstractSocket::SocketError)' here
..\..\QtSDK\Desktop\Qt\4.8.1\mingw\include/QtNetwork/qhostaddress.h:141: error: declaration of C function 'QDebug operator<<(QDebug, const QHostAddress&)' conflicts with
..\..\QtSDK\Desktop\Qt\4.8.1\mingw\include/QtNetwork/qabstractsocket.h:253: error: previous declaration 'QDebug operator<<(QDebug, QAbstractSocket::SocketState)' here
..\..\QtSDK\Desktop\Qt\4.8.1\mingw\include/QtNetwork/qhostaddress.h:148: error: declaration of C function 'QDataStream& operator<<(QDataStream&, const QHostAddress&)' conflicts with
..\..\QtSDK\Desktop\Qt\4.8.1\mingw\include/QtNetwork/qhostaddress.h:141: error: previous declaration 'QDebug operator<<(QDebug, const QHostAddress&)' here当然,我添加了这一行
Qt += network添加到我的.pro文件中,所以这不可能是问题所在。可以包含另一个模块(opengl)而不会出现问题。
我已经通过创建一个只包含QtNetwork的虚拟项目来确保我的Qt安装本身没有任何问题。它工作得很好。
所以,我的项目肯定出了什么问题,但由于错误消息只出现在这种特殊情况下,我不知道该为您提供什么信息。
我所能说的是,这个程序以前是纯C代码,现在正在使用Qt更改为C++,所以它仍然是一个混合体。但只要不包含QtNetwork,这似乎就不是问题。
关于如何解决这个问题,或者什么信息与这个问题相关,有什么想法吗?
发布于 2012-12-15 19:49:51
我终于解决了我的问题。解决方案非常简单:
我将QTNetwork包含在一个头文件中,而我的团队成员又将它包含在其他一些.cpp文件中,但是他错误地将include语句放在了外部的"C“块中,所以最终QTNetwork被包含为外部的"C”,尽管它是C++。
因此,我们学到了两个教训:
https://stackoverflow.com/questions/13571229
复制相似问题