我有一个DLL,我想引用一个QObject并对其进行操作,而不是实际创建一个接口。所以,我包含了“Qt / qobject.h”并进行了编译,但编译器(Visual Studio 2008 pro)给出了语法错误。看起来它无法识别QThread对象。我如何在我的DLL中使用QObject?这甚至可能吗?我是否必须从Qt应用程序启动我的程序?我实际上是在尝试设置一个系统范围的钩子并获得第三个应用程序QWidgets来操作......我知道如何在我的dll中使用QObject吗?
以下是错误:
1>------ Build started: Project: FroggerDLL, Configuration: Debug Win32 ------
1>Compiling...
1>FTClient.cpp
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(154) : error C2059: syntax error : 'type'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(154) : error C2238: unexpected token(s) preceding ';'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2144: syntax error : 'int' should be preceded by ')'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2144: syntax error : 'int' should be preceded by ';'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2059: syntax error : ')'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2208: 'int' : no members defined using this type
1>FroggerDLL - 6 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========
非常感谢任何帮助,
由于
戴夫
答案 0 :(得分:1)
154号线上有什么?我只是宣言
QThread* thread() const;
但在Linux上这是4.5.1,所以可能会有所不同。对涉及令牌type
的任何内容的第一次引用位于第204行,该行是Qt::ConnectionType
类型的变量。
顺便说一句。我只是尝试在我的系统上编译以下内容(在文件incqobj.cpp中)
include <QOObject>
QObject myQOject;
与
g++ -I/usr/lib/qt4/include -I/usr/lib/qt4/include/QtCore -c incqobj.cpp
它编译得很好所以它应该就这么简单。
编辑:由于Jesse确认它在Windows上适用于他,我很想说你有一个非Qt宏进来并干扰。你可以做的一件事就是通过让VS只生成预处理源而不是编译来对编译器实际看到的内容进行健全性检查。
我多年没有使用VS,但我认为选项是\ E可能吗? [编辑:请参阅Jesse的第2条评论,它应该是/ E]现在,它也可能是编译器属性中的显式选项,可以为该源文件设置。不记得它输出的位置,所以你可能需要寻找一点!如果你继续这样做,你可以检查代码是否正好在与原始QObject头中的第154行相对应的部分。
答案 1 :(得分:1)
感谢所有帮助,解决方案:我必须在我的所有其他包含之前包含Qt标头,现在它已编译。
再次感谢!
答案 2 :(得分:0)
尝试包含QThread?
#include <QThread>
Qt广泛使用前向声明,有时您需要包含额外的标题。
编辑:
你是否设定了任何定义?以下是我的2003 Qt商业广告(4.3.4)项目(链接到Qt dll的可执行文件):
QT_LARGEFILE_SUPPORT
QT_DLL
QT_GUI_LIB
QT_CORE_LIB
QT_THREAD_SUPPORT
QT_NETWORK_LIB