C++ C++;-如何调用creator类/对象
我需要从不同的类调用对象的属性和函数 其思想是将“this”作为参数传递给另一个类构造函数。例如:C++ C++;-如何调用creator类/对象,c++,oop,memory,object,parent,C++,Oop,Memory,Object,Parent,我需要从不同的类调用对象的属性和函数 其思想是将“this”作为参数传递给另一个类构造函数。例如: instance = ClassName(this); 然后做: ParentClass parentInstance; ClassName::ClassName(MainApp _instance){ parentInstance = _instance; } 但是,我的编译器说ParentClass不命名类型。思想? 另外,我应该使用指针来节省内存吗?怎么做 提前谢谢 更新: 好
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;
}
game = Game();
game.hi();
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: 这个方法的问题是我现在不能调用指向对象的函数 这是游戏。h:
#ifndef _GAME
#define _GAME
#include "ofMain.h"
class MainApp;
class Game{
public:
Game();
Game(MainApp* _app);
~Game();
void hi();
MainApp* app;
};
#endif
如您所见,app(MainApp类型)作为参数传递。没关系,MainApp作为转发声明存在。但是,当我尝试调用任何应用程序函数时,我都无法调用(编译器错误,在…中表示请求成员appHi,这是非类类型“MainApp”)
MainApp不包含在Game.h中,但Game.h包含在MainApp.h中
<> P>思想> < P>这不是C++中的工作方式。不像JavaScript,在运行时你不能向现有对象注入方法或字段。 < P>这不是C++中的工作方式。不像JavaScript,你不能在运行时向现有对象注入方法或字段。 < P>它是组合的,是一种常见的模式。它在效率上很高。语义和运行时速度/内存占用 您的代码示例有点太多的伪代码,我无法正确阅读。让我向您展示它是如何完成的
class X;
class Y {
...
void DoSomething(X* x, ... args);
};
class X {
Y y;
void DoSomething() {
y.DoSomething(this, args);
}
};
它被称为组合,是一种常见的模式。它在语义和运行速度/内存占用方面都非常高效 您的代码示例有点太多的伪代码,我无法正确阅读。让我向您展示它是如何完成的
class X;
class Y {
...
void DoSomething(X* x, ... args);
};
class X {
Y y;
void DoSomething() {
y.DoSomething(this, args);
}
};
我认为这里可能有两个问题: 1) 在使用父类之前,您需要声明它(例如#包含它的.hpp文件)
2) 赋值“parentInstance=\u instance”将调用赋值运算符,我猜这不是您想要的。让“parentInstance”作为指针。我认为这里可能有两个问题: 1) 在使用父类之前,您需要声明它(例如#包含它的.hpp文件) 2) 赋值“parentInstance=\u instance”将调用赋值运算符,我猜这不是您想要的。将“parentInstance”改为指针。注意“include”部分
“C++语言介绍”部分后,寻找关于“包含”的冗长。
名称空间: 注意“包括”一节“C++语言介绍”部分后,寻找关于“包含”的冗长。
名称空间:HTHMadsen在这里走的是正确的道路,但我们需要更多的代码;ParentClass、ClassName和SaleraApp的类继承权是什么。哪些类是基本类和/或dervied类 编写时:parentInstance=\u instance;如果未定义默认的复制构造函数,编译器将尝试生成该构造函数。您的问题可能是试图从基类指针创建dervied类对象
另外,“this”是一个指针。Madsen在这里的轨道是正确的,但是我们需要更多的代码;ParentClass、ClassName和SaleraApp的类继承权是什么。哪些类是基本类和/或dervied类 编写时:parentInstance=\u instance;如果未定义默认的复制构造函数,编译器将尝试生成该构造函数。您的问题可能是试图从基类指针创建dervied类对象
另外,“this”是一个指针。问题是您有一个循环引用-游戏包括MainApp,MainApp包括游戏。您需要一个“转发声明”,如DeadMG的示例所示
请参阅。问题在于您有一个循环引用-游戏包括MainApp,而MainApp包括游戏。您需要一个“转发声明”,如DeadMG的示例所示
请参阅。如果您只需要使用另一个类的函数和数据成员,请阅读
friend
关键字。它将允许访问来自其他类的类成员
更新:或者,存储指向您需要访问的对象的指针或引用,并为数据成员生成getter,并将函数公开。。。但是我感觉这不是你想要的…如果你需要做的只是使用另一个类的函数和数据成员,请阅读
friend
关键字。它将允许访问来自其他类的类成员
更新:或者,存储指向您需要访问的对象的指针或引用,并为数据成员生成getter,并将函数公开。。。但我觉得这不是你想要的…我不想给他们注射,只要给他们打电话就行了。例如:parentInstance.draw();我不想给他们注射,给他们打电话就行了。例如:parentInstance.draw();我试过了,但它说y的类型不完整。Y是在另一个.h/.cpp文件中定义的,但我包含了它。@ozke:Y有一个完整的类型,如果包含完整的定义。我无法修复您的#includes。我尝试过,但它显示y的类型不完整。Y是在另一个.h/.cpp文件中定义的,但我包含了它。@ozke:Y有一个完整的类型,如果包含完整的定义。我修不好你的车