在Qt 5.7 C ++中创建简单对象

时间:2016-09-16 11:58:40

标签: c++ qt oop object

我有以下问题:

我想在main函数中从类创建Object。看起来这是一个链接器问题。你有任何想法,这个错误信息的原因是什么?

其错误消息为:

  

main.obj:-1:错误:LNK2019:Verweis aufnichtaufgelöstesexternes符号“”public:__ thiscall Test :: Test(class QString)“(?? 0Test @@ QAE @ VQString @@@ Z)”in Funktion“_main”。

     

main.obj:-1:错误:LNK2019:Verweis aufnichtaufgelöstesexternes符号“”公共:__thiscall测试::〜测试(无效)“(?? 1Test @@ QAE @ XZ)”在Funktion“_main”

  

debug \ Wth.exe:-1:错误:LNK1120:2nichtaufgelösteExterne

我有非常简单的课堂测试:

test.h

#ifndef TEST_H
#define TEST_H
#include <QtCore/QObject>

class Test
{
public:
    Test(QString name);
   ~Test();

private:
    QString m_name;
};

#endif // TEST_H

然后.cpp文件如下所示:

TEST.CPP

#include "test.h"

Test::Test(QString st) : m_name(st){}
Test::~Test(){}

非常基础,在我的主要功能中:

的main.cpp

#include <QCoreApplication>
#include "test.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Test t("lam");
    return a.exec();
}

3 个答案:

答案 0 :(得分:2)

你正在寻找一个关于创建QObject类的例子。

让我们扩展您的代码:

#ifndef TEST_H
#define TEST_H
#include <QtCore/QObject>

class Test : public QObject
{
  // Allways add the Q_OBJECT macro 
  Q_OBJECT
public:
    // Use a null default parent
    explicit Test(const QString& name, QObject* parent = 0);
   ~Test();

private:
    QString m_name;
};

#endif // TEST_H

在你的cpp文件中:

#include "test.h"

Test::Test(const QString& st, QObject* parent) : QObject(parent), m_name(st {}
Test::~Test(){}

在你的main.cpp中没有

#include <QCoreApplication>
#include "test.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Test t("lam");
    return a.exec();
}

这应该有效。如果您有链接问题,请执行以下步骤:

  1. 运行qmake(在项目文件夹中使用qt创建者的上下文菜单)
  2. 清理项目
  3. 重新制作

答案 1 :(得分:1)

所以事实证明我必须首先运行qmake。我在做什么,我正在建设而不是跑步。

谢谢大家,花了很多时间。我是Qt的新手。

答案 2 :(得分:0)

现在,您在test.h中加入main.cpp,但test.h无法参考test.cpp实施。因此,您必须在test.cpp的底部包含test.h或将其包含在编译器调用中。