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



我遇到了一些问题,似乎一次又一次地遇到不同的问题。这应该很简单,我只是不知道我在这里到底在做什么,因为我对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;
    };

然后在设置函数中,我得到管理器发送的指针,并将其声明为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,所以我不能。

有人能向我解释一下该怎么做吗?

我会继续寻找解决方案,如果我自己找到了,我会把它发布在这里。感谢您提前提供的帮助!

Alexander

erGuidItem.cpp中,#include "erGuiManager.h"

最新更新