undefined reference to `Spreadsheet::staticMetaObject'
Posted Droplet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了undefined reference to `Spreadsheet::staticMetaObject'相关的知识,希望对你有一定的参考价值。
《C++ GUI Qt 4 编程》学习
一、遇到的问题
- 在学完第4章后,Spreasheet程序也已经写好了。在用 FindDialog 搜索时发现没有效果。
二、解决过程
- 调试跟踪代码,发现 emit 信号函数后,槽函数并没有被调用,所以应该是信号和槽连接问题。
- 在 debug 模式下运行程序过程中,程序输出中会提示 No such slot 和 No such signa。
已知一个类如果要用到信号和槽,需要在类定义中加 Q_OBJECT 宏。和书上代码做对比后
发现确实少了这个宏。 - 添加 Q_OBJECT 宏后,运行构建,提示有错误。除了几个信号和槽函数的错误外,另外有
“undefined reference to `Spreadsheet::staticMetaObject‘” 这个错误提示。这个应该是
moc 这个东西出问题了。搜索了一下,在 StackOverflow 上有一个类似问题。回答中指出:
“Remember to re-run qmake every time you add or remove Q_GADGET or
Q_OBJECT macro to get moc tool to re-generate code for meta data.” 执行 qmake后
再执行构建,问题消除。
三、知识点
- 信号和槽机制需要用到 Q_OBJECT。
- 修改 Q_OBJECT 等宏之后,要运行 qmake 来使 moc 重新生成 makefile。
- IDE(Qt Creator) 中的构建命令是指 make 命令,并不包含 qmake。
以上是关于undefined reference to `Spreadsheet::staticMetaObject'的主要内容,如果未能解决你的问题,请参考以下文章
lib1funcs.S(用于解决裸板实现 printf 中的问题: undefined reference to `__aeabi_uidivmod' 和 undefined referenc
eclipse 报错:93: undefined reference to
ubuntu下调试ffmpeg程序出现undefined reference to pthread_once ,undefined reference to uncompress错误