不允许指向不完整类类型的指针。(与相互引用的类组合。)

时间:2015-12-09 15:57:51

标签: c++ user-interface pointers

我遇到了困难,我似乎一遍又一遍地反对不同的问题。它应该很简单,我只是不知道我在这里做了什么,因为我对C ++很陌生。

我有一个主类,可以为GUI项创建一个管理器。经理将创建GUI项目并更新它们等。

GUI项目有自己的代码来控制自己的行为。但是对于某些事情,我希望从这些GUI项目中获得指向GUI管理器的指针。

这意味着我的GUI管理器需要能够创建项目的项目指针。但是这些项目也需要指向这位经理的指针。

因为不可能互相包含,所以我只在经理中包含了该项目。像这样在经理的头文件中:

erGuiManager.h

#pragma once

#include "ofMain.h"
#include "erGuiItem.h"

class erGuiManager {
public:
    erGuiManager();

    void update();
    void draw();
    void setup();

    erGuiItem* btn;
};

我在erGuiManager.cpp中创建这样的项目,并从经理向项目发送参考。

#include "erGuiManager.h"

void erGuiManager::setup() {
    btn = new erGuiItem();
    btn->setup(this); //THE SETUP GETS A REFERENCE TO THE MANAGER
}

// and update them etc

现在我在erGuiItem.h中创建了一个指向管理器的指针,我没有包含Manager.h,但我只是声明它,所以编译器知道它是一个类:

#pragma once

#include "ofMain.h"
#include "ofImage.h"

class erGuiManager; //DECLARING THE MANAGER

class erGuiItem {

public:
    erGuiItem();
    void setup(erGuiManager* GuiManager);

protected:
    erGuiManager* GM;
    };

然后在setup函数中,我得到管理器发送的指针并将其声明为erGuiItem.cpp中的指针:

#include "erGuiItem.h"

void erGuiItem::setup(erGuiManager* GuiManager) {
    GM = GuiManager;
}

void erGuiItem::update() {
    GM->somevariable = variable; //HERE IS WHERE THE ERROR OCCURS
}

然后我尝试用我的项目中的代码中的管理器的某个指针做一些事情,如上所示。这就是我收到错误的地方不允许指向不完整类类型的指针..

现在我知道这个问题来自何处,我只声明了类erGuiManager,而我没有正确定义它。但我不知道如何做到这一点。通常情况下我必须#include经理来解决这个问题,但由于经理已经包含了erGuiItem,我无法做到。

有人可以向我解释如何正确地做到这一点吗?

我会继续寻找解决方案,如果我自己找到一个,我会在这里发布。感谢您提前提供任何帮助!

亚历山大

1 个答案:

答案 0 :(得分:1)

erGuiItem.cpp #include "erGuiManager.h"