2013-12-07 162 views
-1

我有一個叫做「Cara」的類,我在其他類中有這個屬性: Cara** caras;caras是指向「Cara」類型對象的指針數組。聲明一個動態數組指針

我不知道如何聲明這個屬性。你可以幫我嗎?

+0

我不是100%確定你在問什麼。如果您可以提供一些代碼以及任何可能導致錯誤或意外行爲的代碼,這將有所幫助。 – godel9

+0

如果我這樣做:* cara = new Cara [numCaras];爲了使官僚主義「caras」起作用,好嗎? – own3dh2so4

+0

您確定要「指向Caras的指針數組」而不是「指向caras數組的指針」嗎?你的聲明'Cara ** caras'表示前者,但是'新Cara [n]'讓你後者。無論如何,除非'caras'本身已經被初始化,否則你不能將它分配給'* caras'。有關如何分配Cara指針數組的更多信息,請參閱下面的答案,或者更好地使用像vector這樣的STL類。 – jez

回答

1

如果您不報告某種特定錯誤,很難說出問題所在。但是,它可以幫助你知道你可以聲明一個類:

class Cara; // this is called a "forward declaration" 

,並且允許你參考一下吧:

class Bob { Cara ** caras; }; 

您已經定義它甚至在:

class Cara { int foo; }; 
+0

我的問題是我不知道如何初始化屬性cara ** caras – own3dh2so4

+0

在'Bob'的某種方法中,您可能會說'caras = new Cara * [20];'這會爲20個Cara指針創建空間。然後你可以說'caras [0] = new Cara();'初始化這些指針中的第一個 - 或者當然你可以將一個已知的指針指向一個Cara。等其他插槽。請記住,當你完成對象的使用時,你必須用'new'刪除每個'cara [i]'',最後'delete [] caras',否則你將擁有內存泄漏。 – jez

+0

謝謝你。問題解決 – own3dh2so4

1

如果您要分配指向Cara類型對象的指針數組,您可以使用:

Cara **caras = new Cara *[numElements]; 

如果再要分配Cara對象本身,你可以使用:

for(int i = 0; i < numElements; ++i) 
    caras[i] = new Cara; 
+0

順便說一句,我同意@ThomasMatthews,如果你已經使用C++,你應該使用'std :: vector'。 – godel9

1

不想使用數組,但std::vector

隨着std::vector

class Cara; 

std::vector<Cara *> my_vector_of_pointers; 

//... 
for (i = 0; i < 10; ++i) 
{ 
    my_vector_of_pointers.push_back(new Cara); 
} 

如果必須使用數組:

#define ARRAY_CAPACITY 10 
Cara * my_array_of_pointers[ARRAY_CAPACITY]; 

至於另注,喜歡使用智能指針,而不是普通的指針。在網絡上搜索「boost smart_ptr」或「boost shared_ptr」。

+0

爲什麼'const int ARRAY_CAPACITY = 10'而不是'#define'? –

+0

@ Mhd.Tahawi:對不起,老習慣。 'const int ARRAY_CAPACITY = 10'也應該有效。 –