我认为这可能是#including或forward声明的问题,而不是我的语法问题,因为我目前收到的错误是“无效使用不完整类型'struct MainWindow'”,以及“转发声明”当我尝试在Qt Creator中构建以下内容时,'struct MainWindow'(Qt 4.7.4):
MYCLASS.H
#ifndef MYCLASS_H
#define MYCLASS_H
class MainWindow;
class MyClass
{
public:
MyClass(MainWindow * parent);
void callParentFunction();
private:
MainWindow *myPointer;
};
#endif // MYCLASS_H
MYCLASS.CPP
#include "myclass.h"
MyClass::MyClass(MainWindow *parent) : myPointer(parent)
{
}
void MyClass::callParentFunction()
{
myPointer->setSpinBoxValue(500);
}
MAINWINDOW.H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDoubleSpinBox>
#include "myClass.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
void setSpinBoxValue(double x);
private:
QDoubleSpinBox *mySpinBox;
MyClass *myObject;
};
#endif // MAINWINDOW_H
MAINWINDOW.CPP
#include "mainwindow.h"
MainWindow::MainWindow()
{
mySpinBox = new QDoubleSpinBox;
setCentralWidget(mySpinBox);
myObject = new MyClass(this);
myObject->callParentFunction();
}
void MainWindow::setSpinBoxValue(double x)
{
mySpinBox->setValue(x);
}
我很欣赏任何想法。谢谢!
答案 0 :(得分:3)
您需要在<{strong> mainwindow.h
之后的myclass.cpp
中加入myclass.h
。在myclass.cpp
中,您调用MyClass
的方法(在MyClass::callParentFunction
内),但此时编译器仍然只有MainWindow
的前向声明。