0

当我将插槽添加到我的脚本时,它将不再构建。

inkpuppet.obj:-1: error: LNK2005: "private: void __cdecl InkPuppet::on_aboutButton_clicked(void)" (?on_aboutButton_clicked@InkPuppet@@AEAAXXZ) already defined in main.obj

debug\InkPuppet.exe:-1: error: LNK1169: one or more multiply defined symbols found

这是代码:

inkpuppet.h - 注释掉void on_aboutButton_clicked();,最后的函数将使其运行。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtCore>

namespace Ui {
class InkPuppet;
}

class InkPuppet : public QWidget
{
    Q_OBJECT



public:
    explicit InkPuppet(QWidget *parent = 0);
    ~InkPuppet();

private:
    Ui::InkPuppet *ui;

private slots:
    void on_aboutButton_clicked();
};

#endif // WIDGET_H


void InkPuppet::on_aboutButton_clicked()
{

}

墨水木偶.cpp

#include "inkpuppet.h"
#include "ui_inkpuppet.h"


InkPuppet::InkPuppet(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::InkPuppet)
{
    ui->setupUi(this);
    //connect(ui->lowerFrameBox, SIGNAL(valueChanged(int)), ui->timeSlider, SLOT(setRange(int,int)));
}

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

主文件

#include "inkpuppet.h"
#include "aboutdialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    InkPuppet w;
    w.show();

    return a.exec();
}

aboutdialog.h

#ifndef ABOUTDIALOG_H
#define ABOUTDIALOG_H

#include <QDialog>

namespace Ui {
class AboutDialog;
}

class AboutDialog : public QDialog
{
    Q_OBJECT

public:
    explicit AboutDialog(QWidget *parent = 0);
    ~AboutDialog();

private:
    Ui::AboutDialog *ui;
};

#endif // ABOUTDIALOG_H

aboutdialog.cpp

#include "aboutdialog.h"
#include "ui_aboutdialog.h"

AboutDialog::AboutDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::AboutDialog)
{
    ui->setupUi(this);
}

AboutDialog::~AboutDialog()
{
    delete ui;
}
4

2 回答 2

2

void InkPuppet::on_aboutButton_clicked()在你的inkpuppet.h中定义你的。然后将其包含在 inkpuppet.cpp 和 main.cpp 中 -> 找到一个或多个多重定义的符号。

void InkPuppet::on_aboutButton_clicked()
{

}

在您的 inkpuppet.cpp 文件中。

于 2013-08-25T09:20:42.353 回答
1

如果您粘贴的第一个文件是一个整体,则包含保护有问题。定义是守卫结束之后。

#endif // WIDGET_H

void InkPuppet::on_aboutButton_clicked()
{

}

您的定义紧随其后,#endif这意味着只要在同一个翻译单元中,标题被包含两次,您就会收到此错误。这发生在您的代码中,因为inkpuppet.h它包含在两者中main.cpp,并且inkpuppet.cpp您应该将实现代码on_aboutButton_clicked()放在您的inkpuppet.cpp文件中。

于 2013-08-25T09:21:19.773 回答