0

我有一个奇怪的问题,当我将 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。

有关如何解决此问题或与此问题相关的信息的任何想法?

4

1 回答 1

0

我终于弄清楚了我的问题。解决方案很简单:

我将 QTNetwork 包含在头文件中,而我的团队成员又将其包含在其他一些 .cpp 文件中,但他错误地将包含语句放置在 extern "C" 块中,因此最后 QTNetwork 被包含为一个外部“C”,即使它是 C++。

因此,吸取了两个教训:

  1. 不要依赖队友代码的正确性。
  2. 如果包含导致错误,请跟踪整个包含链以追踪问题。
于 2012-12-15T11:49:50.963 回答