这个折磨我整整一天呀,不断的调试,我想定义一个全局的结构体,是的可以在不同的.cpp
文件夹中使用,但是刚开始遇到了很多困难,怎样都引用不成功,最后终于写好extern和static下的定义
在自定义.h文件中声明,.cpp文件中赋值
在其他文件中引用需要加上自定义的头文件和 声明
如果在自定义的data文件使用extern定义的结构体
在data.h文件中
#ifndef DATA_H
#define DATA_H
#include <QObject>
typedef struct
{
int a;
char b;
}enen;
extern enen enen1; //声明
extern enen enen2;
class Data : public QObject
{
Q_OBJECT
public:
explicit Data(QObject *parent = nullptr);
void getdata();
signals:
public slots:
};
#endif // DATA_H
data.cpp中对定义的结构体赋值
#include "data.h"
//enen enen1;
Data::Data(QObject *parent) : QObject(parent)
{
}
void Data::getdata()
{
enen1.a=10; //赋值
enen2.a=20;
}
在MainWindow中引用
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include<data.h>
#include <QMainWindow>
#include<ceshi.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Data *en;
Ceshi *aa;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
en=new Data(this);
en->getdata();
aa=new Ceshi(this);
// enen1.a=10;
qDebug()<<enen1.a<<endl; //引用
qDebug()<<enen2.a<<endl;
aa->pp();
qDebug()<<enen1.a<<endl;
qDebug()<<enen2.a<<endl;
}
MainWindow::~MainWindow()
{
delete ui;
}
也可以在自定义的ceshi文件中引用
ceshi.h
#ifndef CESHI_H
#define CESHI_H
#include <QObject>
#include<data.h>
class Ceshi : public QObject
{
Q_OBJECT
public:
explicit Ceshi(QObject *parent = nullptr);
void pp();
// enen enen1;
signals:
public slots:
};
#endif // CESHI_H
ceshi.cpp
#include "ceshi.h"
#include<QDebug>
#include<data.h> //必须要加
enen enen1; //必须要加
enen enen2;
Ceshi::Ceshi(QObject *parent) : QObject(parent)
{
}
void Ceshi::pp()
{
qDebug()<<"AAA"<<endl;
enen1.a=130;
enen2.a=140;
qDebug()<<enen1.a<<endl;
qDebug()<<enen2.a<<endl;
}