gpt4 book ai didi

c++ - 初始化类 - 未解析的外部符号

转载 作者:行者123 更新时间:2023-11-28 00:41:56 25 4
gpt4 key购买 nike

我在初始化类时遇到问题,我的搜索发现的所有结果都是各种其他问题。

我尝试在头文件中使用 InkSpot *ink; 初始化类,然后当类需要初始化时,我使用 ink = new InkSpot(this) ; <- 此行导致错误。

inkpuppet.obj:-1: error: LNK2019: 未解析的外部符号“public: __cdecl InkSpot::InkSpot(class QWidget *)” (??0InkSpot@@QEAA@PEAVQWidget@@@Z)函数“private: void __cdecl InkPuppet::testButton(void)” (?testButton@InkPuppet@@AEAAXXZ)

我是 C++ 的新手,在解决类问题时遇到了问题。这是我的代码。

墨水木偶.cpp

#include "inkpuppet.h"
#include "ui_inkpuppet.h"
#include "newdialog.h"
#include "inkspot.h"

#include <Qt>
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
#include <QDialog>
#include <QMainWindow>


InkPuppet::InkPuppet(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::InkPuppet)
{
ui->setupUi(this);

//connect the frame range boxes to the timeslider
connect(ui->lowerFrameBox, SIGNAL(valueChanged(int)), this, SLOT(setMinimum(int)));
connect(ui->upperFrameBox, SIGNAL(valueChanged(int)), this, SLOT(setMaximum(int)));

//connect the menu items
connect(ui->actionNew, SIGNAL(triggered()), this, SLOT(actionNew()));

//connect test
connect(ui->testButton, SIGNAL(clicked()), this, SLOT(testButton()));


}

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

void InkPuppet::setMinimum(int value)
{
ui->timeSlider->setMinimum(value);
}

void InkPuppet::setMaximum(int value)
{
ui->timeSlider->setMaximum(value);
}

void InkPuppet::actionNew()
{
NewDialog *dialog = new NewDialog;
dialog->setModal(true);
dialog->show();
}

void InkPuppet::testButton()
{
ink = new InkSpot(this);
ui->testButton->setText("working");
//ui->paintAreaLayout->addWidget(ink->widget);
//QWidget *widg = new QWidget();
ui->paintAreaLayout->addWidget(ink->widget);

}

墨木偶.h

#ifndef INKPUPPET_H
#define INKPUPPET_H

#include "inkspot.h"
#include "ink.h"

#include <QMainWindow>
#include <QWidget>

namespace Ui {
class InkPuppet;
}

class InkPuppet : public QMainWindow
{
Q_OBJECT

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

private slots:
void setMinimum(int value);
void setMaximum(int value);
void actionNew();
void testButton();

public:
Ui::InkPuppet *ui;
};

#endif // INKPUPPET_H

墨点.cpp

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

#include <QtCore>
#include <QtGui>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>


void InkSpot::paintEvent(QPaintEvent *event)
{
QFile *brushInput; //takes raw 8 bit grayscale image, 8 bit values only
char *brushProto;
uchar *brushData;

brushInput = new QFile("x:\\Development\\InkPuppet\\brush.raw"); //open the raw file
brushInput->open(QIODevice::ReadOnly);
QDataStream in;
in.setDevice(brushInput);
int size = brushInput->size(); //set size to length of raw file

brushProto = new char[size];
in.readRawData(brushProto, size); //read file into prototype
brushData = new uchar[size];

for(int i = 0; i < size; ++i)
{
brushData[i] = (uchar)brushProto[i]; //copy char to uchar array
}

QImage test(brushData, 128, 128, QImage::Format_Indexed8);
QImage test2(128, 128, QImage::Format_ARGB32);

QVector<QRgb> vectorColors(256); //create color table
for(int c = 0; c < 256; c++)
{
vectorColors[c] = qRgb(c, c, c);
}

test.setColorTable(vectorColors);

for(int iX = 0; iX < 100; ++iX)
{
for(int iY = 0; iY < 100; ++iY)
{
test2.setPixel(iX, iY, qRgba(255 - (qrand() % 100), 0 + (qrand() % 100), 0 + (qrand() % 100), qAbs((int)test.pixel(iX, iY)-255)));
}
}

//final conversion for stencil and color brush
QPixmap testPixmap = QPixmap::fromImage(test2);
QPixmap testPixmap2 = QPixmap::fromImage(test);

QPainter painter(this);

painter.drawPixmap(150, 50, 100, 100, testPixmap);
painter.drawPixmap(50, 50, 100, 100, testPixmap2);

delete[] brushProto;
delete[] brushData;
delete brushInput;
}

墨点.h

#ifndef INKSPOT_H
#define INKSPOT_H

#include <QObject>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QLabel>

namespace Ui {
class InkSpot;
}

class InkSpot : public QWidget
{
Q_OBJECT
public:
explicit InkSpot(QWidget *parent = 0);
~InkSpot();
void draw(QPainter *painter);
QWidget *widget;
QLabel *label;
signals:

public slots:

protected:
void paintEvent(QPaintEvent *event);

private:
Ui::InkSpot *ui;

};

#endif // INKSPOT_H

最佳答案

我正在查看您为 InkSpot::InkSpot(QWidget *parent) 定义发布的所有代码,但我没有看到它。错误消息告诉您您尚未定义它。所以我认为这一定是问题所在。

将某物的声明放在头文件中是不够的,您还必须在某个地方定义它。您使用 InkPuppet::InkPuppet(QWidget *parent) 完成了此操作,因此您只需对 InkSpot::InkSpot(QWidget *parent) 执行相同的操作。

关于c++ - 初始化类 - 未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18475219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com