gpt4 book ai didi

C++ - 如何调用创建者类/对象

转载 作者:行者123 更新时间:2023-11-30 02:11:31 24 4
gpt4 key购买 nike

我需要调用来自不同类的对象的属性和函数。

这个想法是将“this”作为参数传递给另一个类构造函数。例如:

instance = ClassName(this);

然后做:

ParentClass parentInstance;
ClassName::ClassName(MainApp _instance){
parentInstance = _instance;
}

但是,我的编译器说 ParentClass 没有命名类型。想法?另外,我应该使用指针来节省内存吗?怎么办?

提前致谢。


更新:

好的,抱歉耽搁了。这是实际的代码。首先,一个简单的类。

游戏类:

头文件

#ifndef _GAME
#define _GAME

#include "ofMain.h"

class Game{

public:
Game();
~Game();

void hi();
};

#endif

cpp文件:

#include "Game.h"
Game::Game(){}
Game::~Game(){}

void Game::hi(){
cout << "hi, I'm game! " << endl;
}

然后,我从 MainApp 创建对象:- 头文件相关代码:

#ifndef _MAIN_APP
#define _MAIN_APP

#include "ofMain.h"
#include "Game.h"

class MainApp : public ofSimpleApp{
public:
Game game;
};

#endif

cpp文件相关代码:

game = Game();
game.hi();

这显然有效,因为我只是在创建一个该死的对象。然而,问题来自组合。

我可以在构造函数中将主应用程序作为参数传递,我可以通过 game.setParent(this);... 问题是,我什至无法定义变量来存储对应用程序的引用。

例如:(在没有指针或其他任何东西的情况下变得容易/效率低下)

游戏.h:

#define _GAME
#ifndef _GAME

#include "ofMain.h"
#include "MainApp.h"

class Game{
MainApp app;

public:
Game();
~Game();

void hi();
};
#endif

这会返回一个“没有命名类型”的错误并且声明 class MainApp 会返回一个“不完整的类型”错误

我确定我在做一些愚蠢的事情。


更新 2:

该方法的问题是我现在无法调用指向对象的函数。

这是Game.h:

#ifndef _GAME
#define _GAME

#include "ofMain.h"

class MainApp;
class Game{


public:
Game();
Game(MainApp* _app);
~Game();

void hi();

MainApp* app;
};

#endif

如您所见,应用程序(MainApp 类型)作为参数传递。没关系,MainApp 存在,因为它是前向声明。但是,当我尝试调用应用程序的任何功能时,我无法调用(编译器错误提示 Request for member appHi in .... which is non-class type 'MainApp'。

MainApp 不包含在 Game.h 中,但 Game.h 包含在 MainApp.h 中。

想法?

最佳答案

问题是您有一个循环引用 - 游戏包括 MainApp,而 MainApp 包括游戏。根据 DeadMG 的示例,您需要“前向声明”。

参见 here .

关于C++ - 如何调用创建者类/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com