• 8860阅读
  • 4回复

Q_OBJECT引起的unexpected end of file while looking for precompiled header错 【已解决感谢!4楼结论】 [复制链接]

上一主题 下一主题
离线view
 
只看楼主 正序阅读 楼主  发表于: 2008-11-18
— 本帖被 XChinux 执行加亮操作(2008-11-30) —
环境:vs2005 + qt4.2.3

这是别人写的一套源码,VS2005工程,比较大。
编译时出了个奇怪的问题,比如在test.h中有下面的类(大致结构),对应test.cpp
class test : public QTestWidget      // 继承自QObject
{
  Q_OBJECT

public:
....

private slots:
....

public slots:
....

private:
....
}

刚开始编译时一切正常,但我无意间把“Q_OBJECT”删除了,再编译还是没问题。
奇怪的是当把“Q_OBJECT”重新加上后,编译时就报错:
compiling moc_test.c: fatal error C1010: unexpected end of file while looking for precompiled header.然后问我是不是忘了“stdafx.h”(但stdafx.h已经include了)
(编译test.c时是没问题的,问题出现在编译moc_test.c时。)
这非常奇怪,因为源码本身实际上等于没有改变,为什么后一次就编不通了呢?

对了,在moc_test.c中有一个error,大意是说test.h没有包含<Qobject>,但即使我加上include <Qobject>,编译也还是不成功。但在最初的源码中,这个错误就算存在编译也能通过。

我尝试在VS2005下新建了一个简单的QT工程,但没有发现这样的问题。而且在VC环境中,把鼠标移动到“Q_OBJECT”上时应该能够看到它的定义,但在上面的class test里却看不到,jump to definition操作也不成功。

实在闹不明白怎么回事,请问有人知道如何解决吗?谢谢!
[ 此贴被view在2008-11-19 16:00重新编辑 ]
离线view
只看该作者 4楼 发表于: 2008-11-19
[楼主] 问题解决了。感谢各位!

说一下结论吧。

原因:
删除了class test 中的 Q_OBJECT 后,VS2005工程中generated files 下的 moc_test.cpp 的预编译头文件属性自动变成了“use Precompiled headers(/Yu)”。什么原因不清楚,估计这套源码建立的环境和我用的不太一样,因为在我自己的VC 环境下新建的QT工程并没有这个问题。不知道是不是哪里有什么可设置的选项。或者是VC版本不同?我这边是Team suite,对方则有可能是2005 Express……

修改方法:
VC下,在 generated files 中选中 moc_test.cpp,右键 -> properities -> c/c++ -> precompiled headers,将属性“Create/use Precompiled headers” 改为 “Not Using Precompiled Headers”。

PS:回复2楼,VC下的QT工程貌似没有 makefile 的……
[ 此贴被view在2008-11-19 16:13重新编辑 ]
离线vrcats
只看该作者 3楼 发表于: 2008-11-19
看代码他应该是在.h里头用的Q_OBJECT,有的时候要手工调用moc重新处理一遍才行,更简单的方法就是重新qmake
离线yooi
只看该作者 2楼 发表于: 2008-11-19
O_BJECT不能定义在CPP文件中
make sure
离线vrcats
只看该作者 1楼 发表于: 2008-11-18
Windows下不太清楚,Unix下就是要重新运行qmake生成Makefile才行。
你把Makefile删掉试试看
快速回复
限100 字节
 
上一个 下一个