【问题标题】:QT multiple definitionsQT多重定义
【发布时间】:2021-12-14 02:50:51
【问题描述】:

我一直在尝试解决这个问题,但似乎没有任何效果,尝试清理项目,运行 qmake,确保文件之间没有递归包含,但仍然显示错误。

.h 文件上也没有任何函数体,一切都在 .cpp 文件上。使用#ifndef #define。

还有另一个几乎相同的 QWindow 类(在结构上,而不是名称上),但它工作正常。

错误只出现在这个类中,但在所有函数中,不知道是什么导致了错误。

代码如下:

rlwindow.h

#ifndef RLWINDOW_H
#define RLWINDOW_H

#include <QWidget>
#include <QString>
#include <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;
    pair<string> UserData;
    bool LoR; // True = Login / False = Register

};

#endif // RLWINDOW_H

rlwindow.cpp

#include "rlwindow.h"
#include "ui_rlwindow.h"

rlWindow::rlWindow(bool login, QWidget *parent) :
    QWidget(parent), ui(new Ui::rlWindow)
{
    ui->setupUi(this);
    //Manager = new fmanager("Data.txt");
    LoR = login;

    if(LoR){
        ui->TitleLabel->setText("Ingresar");
        ui->ContinueButton->setText("Ingresar");
    }
    else{
        ui->TitleLabel->setText("Registro");
        ui->ContinueButton->setText("Registrar");
    }
}

rlWindow::~rlWindow()
{
    delete ui;
}

void rlWindow::on_ContinueButton_clicked()
{/*
    UserData.first = ui->UserNameForm->text().toStdString();
    UserData.second = ui->UserPassForm->text().toStdString();

    if(LoR){
        for(uint i = 0; Manager->Data().size() > i; i++){

            if(Manager->Data()[i][0] == UserData.first && Manager->Data()[i][1] == UserData.second){

            }

        }
    }
    else{
        bool aux = false;
        for(uint i = 0; Manager->Data().size() > i; i++){

            if(Manager->Data()[i][0] == UserData.first){
                aux = true;
                break;
            }
        }
        if(!aux)
            Manager->addItem(UserData.first, UserData.second);
    }
*/
}

【问题讨论】:

  • 显示完整的错误信息...
  • @eyllanesc 添加了错误图片的链接。
  • 问题是你有2个同名的类:class rlWindow : public QWidgetUi::rlWindow *ui;
  • 例如,如果您查看 uic 生成的ui_rlwindow.h 文件,您会看到 setupUi 方法接收到同一类的对象作为参数。
  • 哦,那我应该重命名课程还是什么,或者我应该怎么做? @eyllanesc

标签: c++ qt qwidget multiple-definition-error


【解决方案1】:

必须删除所有的类文件(.cpp、.h、.ui)并再次重做,但名称不同(类名)

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多