2010-10-23 70 views
3

這可能是一個愚蠢的問題。我正在努力做一個文本泥。我需要每個Room類包含其他Room類,這些類可以在嘗試移動到它們或從中獲取信息時引用。但是,我不能那樣做,因爲我顯然不能在其定義中聲明一個類。那麼,我該怎麼做?這就是我的意思是,當我說出我不能做到這一點:其定義中的類變量?

class Room { 
    public: 
     Room NorthRoom; 
     Room EastRoom; 
     Room SouthRoom; 
     Room WestRoom; 
}; 
+0

感謝您的答案。我忘了指針。在被奢侈的高級語言懶洋洋的時候,它們對我來說是一個新概念。 – Reznor 2010-10-23 15:29:44

+2

如果你是C++的新手,你可能想獲得[一本好的介紹性書籍](即使你是一個很好的入門書籍)(http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list)有其他語言的經驗。除了下面的答案之外,還可以看看「智能指針」(您可以在Stack Overflow或Google上搜索),這使得C++ _far_ simpler中的內存管理成爲可能。 – 2010-10-23 15:33:11

回答

5

這是不可能有一個Room成員變量。儘管你可以使用指針或引用。

class Room { 
    public: 
     Room* NorthRoom; 
     Room* EastRoom; 
     Room* SouthRoom; 
     Room* WestRoom; 
}; 
+4

比班級不完整更重要。如果可能的話,最終的課程將會是無限大! – 2010-10-23 15:25:04

+0

@Oli:是的。我在提交帖子後立即將其刪除,因爲我意識到這不是原因。 – kennytm 2010-10-23 15:26:45

1

Room需要有指針到其他Room S(即,Room* S)。

類的類型對象(如Room)的大小至少足以容納其所有成員變量(因此,如果將每個成員變量的大小相加,則會得到最小大小這個類就可以了。

如果一個類可以包含它自己類型的成員變量那麼它的規模將是無限的(每個Room包含其他四個Room S,每個都包含其他四個Room S,每個都包含。 ..)

C++沒有像Java和C#這樣的引用類型對象

2

我相信不是每個房間都有四個兒童房,對不對?否則,你的房間數爲無窮大,這是很難在有限的內存來處理:-)

你可以嘗試

class Room { 
    public: 
     Room* NorthRoom; 
     Room* EastRoom; 
     Room* SouthRoom; 
     Room* WestRoom; 
}; 

然後你就可以有NULL指針時房間沒有子女。

0

你應該使用指針:

class Room { 
    public: 
     Room* NorthRoom; 
     Room* EastRoom; 
     Room* SouthRoom; 
     Room* WestRoom; 
}; 

可能的原因是類不它的構造,所以當你使用指針您初始化它們之後,當類有construcotr定義。