最近刚开始接触Qt,在写程序的时候报了错,如图:
moc_mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "private: void __cdecl MainWindow::do_cursorChanged(void)" (?do_cursorChanged@MainWindow@@AEAAXXZ),该符号在函数 "private: static void __cdecl MainWindow::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall@MainWindow@@CAXPEAVQObject@@W4Call@QMetaObject@@HPEAPEAX@Z) 中被引用
查资料后发现有几种出错原因:
一:项目路径中出现了中文。这种将项目的存储路径全部修改为英文就可以了。
二:之前的qmake文件有问题。Qt重构的时候,给添加了不该加的功能。
第一种解决方案是在清理项目之后,重新执行qmake,再次构建;
第二可能是中间文件可能有问题。把用户配置文件.user删掉,重新再开项目,重新执行qmake再构建;
第三可能存在代码修改但没有保存,编译也会出错,可以先保存,再编译,或者在pro里面加个空格保存,有时候qt检测到代码没有发生变更,是不会再重新编译的;
第四可以看一下终端里面的debug输出,那里面会告诉你哪些是有重新编译,哪些是直接跳过;也可以手动删掉,中间文件就在编译的debug目录下;
三:项目中声明了一些变量,指针等但没有实现,或者两者不一致,也可能是在cpp文件中把类的某个函数实现删掉了,但是在对应的头文件中没有删掉该函数的声明。这种情况只需要将相关代码进行修改或删除后就会正常;
本人是通过第三种问题,同时在界面设计的时候,如果更新了控件之类的一定要先保存再编译,不然也有可能引起该问题;