这样写是可以的:
structs.h:
#pragma once
#include <qstring.h>
struct m {
int a, b, c;
QString d, e, f;
};
struct m;
class QtWidgetsApplication1 : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication1(QWidget *parent = nullptr);
~QtWidgetsApplication1();
private:
Ui::QtWidgetsApplication1Class ui;
m* one;
};
#include "QtWidgetsApplication1.h"
#include "structs.h"
#include "qdebug.h"
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
one = new m;
one->a = 123;
qDebug() << one->a;
}
QtWidgetsApplication1::~QtWidgetsApplication1()
{}
这样写会报错:
struct m;
class QtWidgetsApplication1 : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication1(QWidget *parent = nullptr);
~QtWidgetsApplication1();
private:
Ui::QtWidgetsApplication1Class ui;
m* one;
m two;
};
为什么呢?
C++结构体前置声明出现"找不到类型"错误问题_c++ 有的前向声明找不到类的定义-CSDN博客
让人信服的原因:
前置声明不是一个完整的声明,当编译器该为变量two分配空间时,此时编译器无法确定
它的大小,所以会报错,而指针类型的大小是固定的,所以不会报错。