2012-11-12 148 views
2

因此,我需要我的對象能夠使用主類內的函數,因此當它們被創建時,我希望它們通過它們的參數來獲取它。將主類傳遞給其他類以便他們可以訪問其功能

int main(int argc, char* args[]) 
    { 
    Unit units[3]={{5,5,this},{8,8,this},{12,12,this}}; 
    units[0].init(true); 
    for (int i=1;i<sizeof(units)/sizeof(units[0]);i++) { 
     units[i].init(false); 
    } 

這裏我把「這」應該是主類,這是我會怎麼做它在Java中,但我不能確定如何在這裏做到這一點。我試過「* this」和「this」,但我得到的只是一個錯誤: 在非成員函數中使用'this'無效。 尋找錯誤沒有給我任何工作,因爲我對C++的類系統頗爲不瞭解。

這兩個第一個參數是用於位置的。 Init命令參數設置它們是不是盟友。

我想要的單位類能夠訪問:

int getClosestHostileX(int ask_x,int ask_y,bool team) { 
    return 55; 
} 

還有就是應該在這裏更多的代碼後,我只是試圖讓他們返回。

我使用Code :: Blocks IDE和GNU GCC編譯器。

TL; DR如何讓我的其他課程從我的主課程訪問功能?

+0

C++中沒有主類。這只是一個功能。 – juanchopanza

+0

一旦「this」進入你的單位,你期望如何使用它? –

回答

1

你也無法在Java中這樣做。在Java中,入口點是一個靜態方法,沒有關聯的對象實例。

解決方案是一樣的 - 實例化你的類型。

int main(int argc, char** argv) 
{ 
    MainClass main_object; // creates an instance 
    Unit units[3]={{5,5,&main_object},{8,8,&main_object},{12,12,&main_object}}; 
    units[0].init(true); 
    for (int i=1;i<sizeof(units)/sizeof(units[0]);i++) { 
     units[i].init(false); 
} 
+0

謝謝我會試試看。 – 2GG

+0

所以我做了你說的,雖然我不得不刪除main_object之前的「&」也許他們很重要?修復了一些其他小問題後,我使它完美運行,謝謝。 – 2GG

+0

@ 2GG:您試圖使用'this',它是C++中的一個指針,所以我給出了一個指針示例。如果你的實際代碼使用引用,那麼刪除'&'應該是正確的。如果它進行復制,那麼它可能會被破壞。 –

1

在C++中,main不是類,也不是類的一部分,所以this在其上下文中沒有意義。

0

C++不像java。你不需要在一個類中擁有所有的方法(或者用C++調用的函數)。

main是一個函數,而不是一個類。有沒有this

現在你可以有全局變量,或者你可以把變量/對象放在堆上,其他類可以使用,但一般來說,c#實際上並沒有一個Main類。

相關問題