Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;Qt4.8::将对象传递给另一个类-成员访问不完整类型错误 我在C++ Qt中是新手,并且努力正确地使用前向声明和包含。< /P>_C++_Qt_Include_Forward Declaration - Fatal编程技术网

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
gui.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
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;