【问题标题】:C++: Problems with having a containing class call a function from a contained classC++:包含类从包含类调用函数的问题
【发布时间】:2012-01-26 01:00:55
【问题描述】:

我相信这可能是#include 或前向声明的问题,而不是我的语法问题,因为我目前遇到“无效使用不完整类型'struct MainWindow'”和“前向声明'struct MainWindow' 当我尝试在 Qt Creator (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);
}

主窗口.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

主窗口.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);
}

我会很感激任何想法。谢谢!

【问题讨论】:

    标签: c++ oop


    【解决方案1】:

    您需要将mainwindow.h 包含在myclass.cpp 之后 myclass.h。在myclass.cpp 中,您调用MyClass 的方法(在MyClass::callParentFunction 内),但此时编译器仍然只有MainWindow 的前向声明。

    【讨论】:

    • 该死,迟到了 46 秒...我会删除我的帖子:无论如何,你的更好... +1
    • 天啊!!!谢谢你。至少代码应该对其尝试这样做的其他人有所帮助......
    猜你喜欢
    • 2011-04-12
    • 2017-05-12
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多