[英]LNK2005 and LNK1169 error appeared suddenly
在标记为已回答之前,请仔细阅读此内容,因为其他解决方案都无法帮助我。
所以当我在调试或发行版中编译程序时遇到2个错误:
moc_guiitemlistrepeat.obj:-1: error: LNK2005: "public: void __cdecl GUIItemListRepeat::isUpdated(void)" (?isUpdated@GUIItemListRepeat@@QEAAXXZ) already defined in guiitemlistrepeat.obj
release\Calendar.exe:-1: error: LNK1169: one or more multiply defined symbols found
他们在我调试时突然出现,我不知道出了什么问题,因为据我所知我没有编辑该文件。
标头:
#ifndef GUIITEMLISTREPEAT_H
#define GUIITEMLISTREPEAT_H
#include <QtWidgets>
#include "appointmentrepeat.h"
class GUIItemListRepeat : public QFrame
{
Q_OBJECT
public:
GUIItemListRepeat(AppointmentRepeat *appointment);
~GUIItemListRepeat();
AppointmentRepeat* getItem();
signals:
void isUpdated();
void showDetails(AppointmentRepeat *todo);
void remove(GUIItemListRepeat *item);
private slots:
void showClicked();
void deleteClicked();
private:
AppointmentRepeat *m_repeat;
QLabel *m_title, *m_type, *m_begin, *m_end;
QPushButton *m_show, *m_delete;
};
#endif // GUIITEMLISTREPEAT_H
资源:
#include "guiitemlistrepeat.h"
GUIItemListRepeat::GUIItemListRepeat(AppointmentRepeat *appointment)
{
m_repeat = appointment;
connect(appointment, SIGNAL(updated()), this, SLOT(isUpdated()));
m_title = new QLabel(m_repeat->getTitle());
m_begin = new QLabel(m_repeat->getStart().toString(QString("hh:mm")));
m_end = new QLabel(m_repeat->getEnd().toString(QString("hh:mm")));
m_show = new QPushButton(QString("Show"));
m_delete = new QPushButton(QString("Delete"));
QString type;
if (m_repeat->getType() == DAILY)
type = tr("Dagelijks");
else if (m_repeat->getType() == WEEKLY)
type = tr("Wekelijks(%1)").arg(m_repeat->getDate().toString(tr("ddd")));
else if (m_repeat->getType() == MONTHLY)
type = tr("Maandelijks(%1)").arg(m_repeat->getDate().toString(tr("dd")));
else
type = tr("Jaarlijks(%1)").arg(m_repeat->getDate().toString(tr("dd/MM")));
m_type = new QLabel(type);
connect(m_show, SIGNAL(clicked()), this, SLOT(showClicked()));
connect(m_delete, SIGNAL(clicked()), this, SLOT(deleteClicked()));
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(m_type, 0, 0);
mainLayout->addWidget(m_begin, 1, 0);
mainLayout->addWidget(m_end, 2, 0);
mainLayout->addWidget(m_title, 0, 1, 1, 2);
mainLayout->addWidget(m_show, 1, 1);
mainLayout->addWidget(m_delete, 1, 2);
setLayout(mainLayout);
setFrameShape(QFrame::Box);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
}
GUIItemListRepeat::~GUIItemListRepeat()
{
delete m_title;
delete m_type;
delete m_begin;
delete m_end;
delete m_show;
delete m_delete;
}
AppointmentRepeat* GUIItemListRepeat::getItem()
{
return m_repeat;
}
void GUIItemListRepeat::showClicked()
{
emit showDetails(m_repeat);
}
void GUIItemListRepeat::deleteClicked()
{
emit remove(this);
}
void GUIItemListRepeat::isUpdated()
{
m_title->setText(m_repeat->getTitle());
m_begin->setText(m_repeat->getStart().toString(QString("hh:mm")));
m_end->setText(m_repeat->getEnd().toString(QString("hh:mm")));
if (m_repeat->getType() == DAILY)
m_type->setText(tr("Dagelijks"));
else if (m_repeat->getType() == WEEKLY)
m_type->setText(tr("Wekelijks(%1)").arg(m_repeat->getDate().toString(tr("ddd"))));
else if (m_repeat->getType() == MONTHLY)
m_type->setText(tr("Maandelijks(%1)").arg(m_repeat->getDate().toString(tr("dd"))));
else
m_type->setText(tr("Jaarlijks(%1)").arg(m_repeat->getDate().toString(tr("dd/MM"))));
}
如果我能得到这个答案,那将对我有很大帮助,因为我真的完全陷入了绝望:(
PS:它与以下事项有关:找不到文件:moc_guiitemlistrepeat.obj?
编辑:如果这可以帮助您,这里是
moc_guiitemlistrepeat.obj https://dl.dropboxusercontent.com/u/110311126/moc_guiitemlistrepeat.obj
moc_guiitemlistrepeat.cpp https://dl.dropboxusercontent.com/u/110311126/moc_guiitemlistrepeat.cpp
问题是您将isUpdated()
函数声明为信号,但是将其用作类中的插槽。 结果,您获得了相同功能的两个定义:一个在moc_guiitemlistrepeat.cpp
文件(由qmake生成)中,另一个在您自己编写的void GUIItemListRepeat::isUpdated()
定义中。
要解决此问题,您只需要声明isUpdated()
作为插槽。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.