2013-12-07 214 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'也应该有效。 –