2014-05-09 143 views
3

更新下面C++創建一個「包裝」

我想創建此包裝包含指向其他所有類。我已經打了這個問題(舉例):

的main.cpp

struct wrap { 
    Game* game; 
    Player* player; 
    Map* map; 
}; 

game.h

class Game { 
    private: 
    wrap* info; 
} 

有沒有解決的辦法,包裹需要遊戲和遊戲需要包裝。 (我知道包裝類[這種情況下,結構]是不是最好的做法,但我經常需要這些信息在其他的類。)

更新 現在,我有一個新的問題。

items.h

// top 
struct CoreInfo; 


void Items::test() { 
    struct CoreInfo* b; 
    //b->testing = 4; 
} 

(該結構CoreInfo包含變量「INT測試。」我無法弄清楚如何在項目類中訪問任何正常誤差:會員「測試」 7要求在 'b',其是非類型的 'CoreInfo *'

+4

您可以在另一個類上轉發聲明一個類。 – 0x499602D2

回答

7

只是向前聲明渦卷結構,如下所示:

的main.cpp

#include "game.h" 

struct wrap { 
    Game* game; 
    Player* player; 
    Map* map; 
}; 

game.h

struct wrap; 

class Game { 
    private: 
    struct wrap* info; 
} 

編輯:

的問題是,你沒有做聲明並採取編譯單元的優勢定義之間的分離。如果你定義了你的類和它的成員在一個編譯單元(items.cpp),而聲明它在標題items.h,你會沒有問題。

讓我們做一個例子來說明這一點:

foo.h中

#include "bar.h" 

class A { 
    B b_instance; 
    void do_something(int i, int j); 
} 

Foo.cpp中

#include "foo.h" 

int A::do_something(int i, int j) { 
    return i+j; 
} 

bar.h

class B { 
    A a_instance; 
    void use_a(); 
} 

bar.cpp

#include "foo.h" // which includes bar.h as well 

void B::use_a() { 
    int k = a_instance.do_something(); 
} 
+0

謝謝,那就是我正在尋找的。 現在我有一個後續問題(我更新了我的第一篇文章。) –

+0

如果您還有其他問題,請發表另外一篇文章,不要編輯您有問題的舊問題。 – zmo

+0

好的。最後一件事,我一直在嘗試將我的一些文件轉換爲單元編譯,並且因爲使用了header.h文件而導致多重定義問題。 我可以將所有函數和類移動到一個文件中,並將函數放在它們(新)相應的.cpp文件中嗎? [只是想問最後一個簡單的問題...] –