2016-07-23 83 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