包含<qtnetwork> </qtnetwork>的C链接和声明错误

时间:2012-11-26 18:52:31

标签: qt

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

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

1 个答案:

答案 0 :(得分:0)

我终于弄明白了我的问题。解决方案非常简单:

我将QTNetwork包含在一个头文件中,而我的团队成员又将其包含在其他一些.cpp文件中,但是他错误地将include语句放在了一个extern“C”块中,这样到底QTNetwork被列为外部“C”,即使它是C ++。

所以,有两个经验教训:

  1. 不要依赖队友代码的正确性。
  2. 如果包含导致错误,请跟进整个包含链以追踪问题。