Qt项目rlWindow类出现multiple definitions多重定义错误如何解决
问题原因及解决方案
你代码里的错误来自rlwindow.h的两处语法问题:
- 头文件引用错误:你引入的
<string.h>是C语言的字符串函数库,不包含C标准字符串类型std::string的定义,需要替换为C的<string>头文件。 - pair类型使用错误:
- 标准库
std::pair要求传入两个模板参数,你代码中只写了pair<string>不符合语法规则,结合你注释的业务逻辑,UserData需要存储用户名和密码两个字符串,应该改为std::pair<std::string, std::string>。 - 没有添加
std命名空间前缀,头文件中不建议使用using namespace std(会造成全局命名空间污染),所有标准库类型都需要显式加std::前缀。
- 标准库
修改后的rlwindow.h核心代码片段
#ifndef RLWINDOW_H #define RLWINDOW_H #include <QWidget> #include <QString> #include <string> // 替换原来的<string.h> #include "Utilities.h" //#include "fmanager.h" namespace Ui {class rlWindow;} class rlWindow : public QWidget { Q_OBJECT public: explicit rlWindow(bool login, QWidget *parent = nullptr); ~rlWindow(); private slots: void on_ContinueButton_clicked(); private: Ui::rlWindow *ui; //fmanager *Manager; std::pair<std::string, std::string> UserData; // 修正pair的写法 bool LoR; // True = Login / False = Register }; #endif // RLWINDOW_H
修改完成后清理项目、重新运行qmake再编译即可解决报错。
内容的提问来源于stack exchange,提问作者Dain
相关产品推荐
相关产品推荐

