我有一个奇怪的问题,当我将QtNetwork模块中的任何内容包含到我的Qt桌面应用程序中时,我会得到一堆错误,甚至在使用包含的内容之前。 例如,如果我包含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,这似乎不是问题。
有关如何解决此问题或与此问题相关的信息的任何想法?
答案 0 :(得分:0)
我终于弄明白了我的问题。解决方案非常简单:
我将QTNetwork包含在一个头文件中,而我的团队成员又将其包含在其他一些.cpp文件中,但是他错误地将include语句放在了一个extern“C”块中,这样到底QTNetwork被列为外部“C”,即使它是C ++。
所以,有两个经验教训: