mainwindow.cpp:(.text+0x91b2): undefined reference to `endpoint_se(QVector<double>, int,............

本文记录了一次C++编程中遇到的关于引用参数的错误排查经历。作者在调试时发现,将函数的一个整型参数更改为引用类型后,程序能够正常编译。进一步排查发现,传递给函数的一个QVector<double>参数未正确传递地址,缺少引用符号(&),导致编译错误。

哭无语搞了半天不知道这个错误怎么解决,头文件也包括了,参数也正确不知道哪错了。

是不是标点符号的问题呢??试试。

调试过程中发现一个问题,比如一个函数void  test(int a)  { a++; }      外面的a是不会变的,写成void  test(int &a)  { a++; } 才行大哭

卧槽,然后我把函数中的一个int参数改为int & 型居然编译就通过了可怜 

啊啊,我错了,问题未解决。头疼、 不会是我传递参数过多吧?传了10个参数。

啊啊啊,原来是一个QVector<double>  参数给的不是地址,少了&,导致程序出错,不过这个undefined reference太让人误会了吧,还以为定义哪里出问题了奋斗

在 Qt 项目中,当遇到 `undefined reference to 'MainWindow::staticMetaObject'` 或类似的链接错误时,通常表示编译系统未能正确生成或链接与元对象(meta-object)相关的代码。Qt 的信号和槽机制、运行时类型信息(RTTI)以及动态属性系统依赖于这些由 MOC(Meta-Object Compiler)生成的代码。 ### 错误原因分析 此类错误通常出现在以下几种情况: 1. **类定义中使用了 `Q_OBJECT` 宏,但未运行 MOC 来生成对应的元对象代码**。 2. **构建系统未能识别并编入 MOC 生成的 `.moc` 文件**。 3. **CMake 或 qmake 配置不完整,导致 MOC 没有被触发或生成文件未被包含进构建流程**。 4. **项目配置中遗漏了对 Qt 元对象模块的支持,例如未链接 `Qt5Core` 等必要的库**。 ### 解决方法 #### 方法一:确保类定义中包含 `Q_OBJECT` 并重新运行构建工具 如果类需要使用信号与槽机制,则必须在其私有部分声明 `Q_OBJECT` 宏。例如: ```cpp class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); // ... }; ``` 添加该宏后,需执行完整的构建流程,包括重新运行 `qmake` 或 `cmake`,以确保 MOC 正确处理该类并生成相应的 `.moc` 文件[^3]。 #### 方法二:检查 CMakeLists.txt 中是否包含 MOC 生成的文件 若使用 CMake 构建系统,应启用自动 MOC 处理,或手动将生成的 `.moc` 文件加入目标链接中。推荐做法是启用 `AUTOMOC` 功能: ```cmake set(CMAKE_AUTOMOC ON) add_executable(MyApp main.cpp mainwindow.cpp) ``` 这将让 CMake 自动调用 MOC 并处理所有需要的源文件。若未启用 `AUTOMOC`,则需手动添加生成的 `.moc` 文件: ```cmake add_executable(MyApp main.cpp mainwindow.cpp moc_mainwindow.cpp) ``` 注意:手动方式要求确保 `moc_mainwindow.cpp` 已经存在,并且内容是最新的[^2]。 #### 方法三:确认 qmake 被正确执行 在基于 `.pro` 文件的项目中,修改 `Q_OBJECT` 或其他元系统相关宏后,必须重新运行 `qmake` 以生成更新后的 Makefile 和 MOC 文件。Qt Creator 中的“构建”操作默认只执行 `make`,不会触发 `qmake`,因此可能需要手动选择“运行 qmake”选项来刷新构建配置[^3]。 #### 方法四:确保链接正确的 Qt 库 检查项目是否正确链接了所需的 Qt 库。例如,在 `.pro` 文件中应包含如下语句以链接核心模块: ```qmake QT += core gui widgets ``` 在 CMake 中则应通过 `target_link_libraries` 链接对应库: ```cmake find_package(Qt5Widgets REQUIRED) target_link_libraries(MyApp Qt5::Widgets) ``` 否则即使 MOC 成功生成代码,也可能因缺少 Qt 运行时支持而导致链接失败[^1]。 #### 方法五:清理并重新构建项目 有时旧的构建残留可能导致问题。建议彻底清理项目并重新构建: - 在 Qt Creator 中选择“清除项目”和“重新构建项目”。 - 若使用命令行构建,删除 `build` 目录并重新运行 `qmake` 或 `cmake` 后再进行构建。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值