2016-07-23 44 views
0

之外(这是有可能的是这个问题已经被问很多时候已经和我对这个转贴遗憾,但任何事情我发现只是没有帮助我,因为我是比较一个初学者在C++)使用对象的声明文件(C++)

所以这里是一个例子来说明我的问题

我有类怪物

class Monster{ 
public: 
Monster(); 

void attack(); 

private: 
int _health; 
int _damage; 
}; 

和我有类级别

class Level{ 
Level(); 
}; 

我创建从类怪物对象“蛇”在我的“的main.cpp”

#include "Monster.h" 

int main(){ 

Monster snake; 

} 

现在我该怎么办,如果我想在我的“级别”类中使用“蛇”?如果我想做“snake.attack();”例如在“Level.cpp”里面?

如果我再次声明它在“Level.cpp”它将是一个独立的对象与自己的属性不会呢?

我一直做我的类的静态成员函数到现在为止,我可以做“怪物::攻击();”在我的程序中的任何地方,但与此tachnique我不能有多个对象根据其属性做不同的事情(snake1,snake2,bat1等...)

感谢您的帮助提前! (并为可能reoccuring问题抱歉)

+4

为什么不买一本关于C++的书并阅读它?否则,这将是一个耗费时间的问题练习 –

回答

1

。假定这些剪是您的.h文件。

你level.cpp应该是这样的:

#include "level.h" // its own header 
#include "monster.h" // header with Monster::attack() declaration 

Level::DoAttack(Monster& monster) { // using snake as parameter. 
    health = health - monster.attack(); // monster hits us, subtract health. 
} 

monster.h将

class Monster{ 
public: 
    Monster(); 

    void attack(); 

private: 
    int _health; 
    int _damage; 
}; 

和monster.cpp

Monster::attack() { 
    // code to calculate the attack 
} 
+0

,但该函数不会识别对象“怪物”,除非它是在其文件中创建的。即使我包含“Monster.h” – stimulate

+0

只要在头文件中声明了Monster,它应该没问题,Monster :: attack()函数需要在monster.cpp文件中实现。 – Surt

+0

谢谢!就是这样。我虽然已经尝试过,但也许我那时做了其他错误。是否通常在头文件中声明对象?或者有什么理由不去? – stimulate

0

我不能完全理解你的问题。但从我的理解。我认为你想访问一个在main()中实例化的Monster对象用于所以,这里是你可以做的。在level等级内添加一个以怪物对象为参数的构造函数。然后实例化一个等级对象并传递其中的怪物对象。像这样, Level l = new Level (蛇);

+0

我试图让它尽可能简单而直接,但也许我在细节方面欠缺。 我想要做的就是在main.cpp中创建一个类“Monster”中的对象(Monster snake)。但之后我想能够使用不同文件中的确切对象(例如“Level.cpp”)来执行类似snake.attack()的操作。 但是每当我这样做,编译器都不会识别标识符“蛇”,因为它是在一个完全不同的文件中声明的。我基本上想要全局对象 – stimulate

+0

你试过我的解决方案吗?在那个解决方案中,一个怪物类对象的副本将如果你想要的是同一个对象而不是副本,可以通过引用来传递它。它可以像级别(Monster&m)一样作为级别类中的构造函数来完成。 –

+0

我真的没有,因为解决方案似乎离我的预期很远。这听起来很愚蠢,但我认为我的问题很简单,我不认为你的解决方案是正确的。 你的解决方案可以工作,但它会使它在我现有的代码中实现变得非常复杂。我现在知道,我只需在类后面的头文件中声明我的对象,并将它们包含在每个包含头文件的文件中(我希望每次都不会声明新对象..那么我可能会使用您的方法) 感谢您的解决方案! – stimulate

0

通过声明你没有创建任何对象的类。通常通过包含相应的头文件来声明一个类。

所以,在Level.h,你会#include <Monster.h>,那么你可以在Level内引用它。

但严重的是,你不能没有了解基本的东西,如声明与定义,头文件(.h)中,类与对象,指针和引用等,这将是最好写太多的C++代码投资一本书或至少在线阅读一些教程。

+0

但我宣布对象是正确的?因为那就是我的理由。我知道我必须包含我想要访问的类的头文件,但即使当我这样做时,我也无法在该文件中使用对象。即使当我在main中声明/创建一个对象,然后想要在其相应的.cpp文件中使用相同的对象时,它也不会工作,因为它未定义 – stimulate

+0

您声明了一个* class *。然后你实例化一个类来获得一个*对象*。 '怪物蛇;'例化一个'Monster'类型的物体'蛇'。在那之前,'Monster'类被声明(即编译器已知),但是它的对象不存在。 – rustyx

+0

但我得到的对象,它在那里,它有它的属性等,我如何使用它从其他文件?我已经包含了相应的.h文件,但是我不能从其他文件中使用我的对象,只能使用它创建的文件。还没有全局对象或类似的东西? 我知道我是一名新手,我尽量通过在网上阅读来学习,但我从未发现任何关于此的内容。 – stimulate