C++;Qt4.8::将对象传递给另一个类-成员访问不完整类型错误 我在C++ Qt中是新手,并且努力正确地使用前向声明和包含。< /P>
我想做的是:C++;Qt4.8::将对象传递给另一个类-成员访问不完整类型错误 我在C++ Qt中是新手,并且努力正确地使用前向声明和包含。< /P>,c++,qt,include,forward-declaration,C++,Qt,Include,Forward Declaration,我想做的是: 我有一个QtGUI(类Ui::Gui),我们可以在其中设置值 我想将这些值保存在Gui类变量中 单击按钮(生成Xml)后,我希望传递该对象 “ui”指向XmlGeneratorClass,因此我可以使用这些值生成Xml gui.h #ifndef GUI_H #define GUI_H #include <QMainWindow> #include <QDebug> #include "xmlgeneratorqobject.h" namespace
- 我有一个QtGUI(类Ui::Gui),我们可以在其中设置值
- 我想将这些值保存在Gui类变量中
- 单击按钮(生成Xml)后,我希望传递该对象 “ui”指向XmlGeneratorClass,因此我可以使用这些值生成Xml
#ifndef GUI_H
#define GUI_H
#include <QMainWindow>
#include <QDebug>
#include "xmlgeneratorqobject.h"
namespace Ui {
class Gui;
}
class Gui : public QMainWindow
{
Q_OBJECT
public:
explicit Gui(QWidget *parent = nullptr);
~Gui();
qint8 testvalue = 1;
signals:
void transmitToXmlGen(Ui::Gui*);
private slots:
void on_pushButtonGenerateXml_clicked();
private:
Ui::Gui *ui;
XmlGeneratorQObject *xmlgenerator = new XmlGeneratorQObject();
};
#endif // GUI_H
#ifndef XMLGENERATORQOBJECT_H
#define XMLGENERATORQOBJECT_H
#include <QObject>
#include <QDebug>
namespace Ui {
class XmlGeneratorQObject;
class Gui;
}
class XmlGeneratorQObject : public QObject {
Q_OBJECT
public:
explicit XmlGeneratorQObject(QObject * parent = nullptr);
private slots:
void receiveFromGui(Ui::Gui*);
};
#endif // XMLGENERATORQOBJECT_H
xmlgeneratorqobject.h
#ifndef GUI_H
#define GUI_H
#include <QMainWindow>
#include <QDebug>
#include "xmlgeneratorqobject.h"
namespace Ui {
class Gui;
}
class Gui : public QMainWindow
{
Q_OBJECT
public:
explicit Gui(QWidget *parent = nullptr);
~Gui();
qint8 testvalue = 1;
signals:
void transmitToXmlGen(Ui::Gui*);
private slots:
void on_pushButtonGenerateXml_clicked();
private:
Ui::Gui *ui;
XmlGeneratorQObject *xmlgenerator = new XmlGeneratorQObject();
};
#endif // GUI_H
#ifndef XMLGENERATORQOBJECT_H
#define XMLGENERATORQOBJECT_H
#include <QObject>
#include <QDebug>
namespace Ui {
class XmlGeneratorQObject;
class Gui;
}
class XmlGeneratorQObject : public QObject {
Q_OBJECT
public:
explicit XmlGeneratorQObject(QObject * parent = nullptr);
private slots:
void receiveFromGui(Ui::Gui*);
};
#endif // XMLGENERATORQOBJECT_H
#如果NDEF XMLGENERATORQOBJECT
#定义XMLGENERATORQOBJECT_H
#包括
#包括
名称空间用户界面{
类XmlGeneratorQObject;
类图形用户界面;
}
类XmlGeneratorQObject:公共QObject{
Q_对象
公众:
显式XmlGeneratorQObject(QObject*parent=nullptr);
专用插槽:
void receiveFromGui(Ui::Gui*);
};
#endif//XMLGENERATORQOBJECT\u H
xmlgeneratorqobject.cpp
#include "gui.h"
#include "ui_gui.h"
Gui::Gui(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Gui)
{
ui->setupUi(this);
connect(this,SIGNAL(transmitToXmlGen(Ui::Gui*)),xmlgenerator,SLOT(receiveFromGui(Ui::Gui*)));
}
Gui::~Gui()
{
delete ui;
}
void Gui::on_pushButtonGenerateXml_clicked()
{
emit transmitToXmlGen(ui);
}
#include "xmlgeneratorqobject.h"
XmlGeneratorQObject::XmlGeneratorQObject(QObject *parent){}
void XmlGeneratorQObject::receiveFromGui(Ui::Gui* objectFromGui)
{
qDebug() << objectFromGui->testvalue; // ERROR member access into incomplete type 'Ui::Gui'
}
#包括“xmlgeneratorqobject.h”
XmlGeneratorQObject::XmlGeneratorQObject(QObject*父项){}
void XmlGeneratorQObject::receiveFromGui(Ui::Gui*objectFromGui)
{
qDebug()testvalue;//成员访问不完整类型“Ui::Gui”时出错
}
预期结果:
应该可以从传递的gui对象访问公共变量
实际结果:
对不完整类型“Ui::Gui”的成员访问
你能帮我学习远期申报/包括吗?
我的方法大体上可以吗?您的xmlgeneratorqobject.cpp需要这一行
#include "ui_gui.h"
这为它提供了ui小部件的详细信息。此文件由Qt构建系统生成。谢谢,很高兴了解我。但是我想使用来自类Gui public的变量:qint8 testvalue=1;然后需要包括声明它的头。在这种情况下,gui.hun显然不能解决我的问题。我在xmlgeneratorobject.cpp中添加了#include“gui.h”。同样的错误。(我还清理并重建了项目..以防万一)在这种情况下,您尝试访问的是Gui类的对象,而不是Ui::Gui类的对象。从receiveFromGui函数参数中的参数类型中删除Ui::,您应该是goodYayyy,它起作用了-谢谢!!:)对于所有读者:我将Ui::从receiveFromGui函数参数的声明和定义中删除,并将xmlgeneratorqobject.h中的前向声明更改为:命名空间Ui{class xmlgeneratorqobject;}class Gui;