Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-如何调用creator类/对象_C++_Oop_Memory_Object_Parent - Fatal编程技术网

C++ C++;-如何调用creator类/对象

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不命名类型。思想? 另外,我应该使用指针来节省内存吗?怎么做 提前谢谢 更新: 好

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

其思想是将“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;
}
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++语言介绍”部分后,寻找关于“包含”的冗长。

名称空间:


HTH

Madsen在这里走的是正确的道路,但我们需要更多的代码;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有一个完整的类型,如果包含完整的定义。我修不好你的车