2013-07-29 26 views
1

我想保留兩個類在一個文件中,我希望其中一個具有另一個內部的實例。所以在我的頭文件我有這樣的事情:C++一個文件幾個類

class Box{ 
    Item a,b,c; 
    /* 
    ... 
    */ 
} 

class Item{ 
    /* 
    ... 
    */ 
} 

很明顯,編譯器說,它不知道什麼項目。如何使它看到Item類?

回答

8

只是移動項目在類Box之上的類定義。現在Box可以看到完整的Item類型,並且可以成爲Box的成員。

class Item{ 
    /* 
    ... 
    */ 
} 

class Box{ 
    Item a,b,c; 
    /* 
    ... 
    */ 
} 
3

你可以通過轉發在你的代碼開始加入聲明所需類:

class Box; 
class Item; 

當心編譯器應該知道一個類的每個數據成員的大小。您可能要重新排序你的類定義的保證,或者使用指針,等等

您可能需要使用原始指針,引用,智能指針,...

+0

這不會在這種情況下工作,正是因爲你提到的原因,:編譯器需要知道成員的大小。 – piokuc

+0

「請注意,編譯器應該知道類的每個數據成員的大小。」如果對於類型T這是不可能的,你應該使用T的指針和引用來繞過這個問題。 – user2485710

+0

@ user2485710嗯,我寧願將類聲明分成兩個文件,而不是通過使用指針「繞過問題」。 – piokuc

2

試試這個:

class Item{ 
    /* 
    ... 
    */ 
} 

class Box{ 
    Item a,b,c; 
    /* 
    ... 
    */ 
}