回答
如果您不报告某种特定错误,很难说出问题所在。但是,它可以帮助你知道你可以声明一个类:
class Cara; // this is called a "forward declaration"
,并且允许你参考一下吧:
class Bob { Cara ** caras; };
您已经定义它甚至在:
class Cara { int foo; };
我的问题是我不知道如何初始化属性cara ** caras – own3dh2so4
在'Bob'的某种方法中,您可能会说'caras = new Cara * [20];'这会为20个Cara指针创建空间。然后你可以说'caras [0] = new Cara();'初始化这些指针中的第一个 - 或者当然你可以将一个已知的指针指向一个Cara。等其他插槽。请记住,当你完成对象的使用时,你必须用'new'删除每个'cara [i]'',最后'delete [] caras',否则你将拥有内存泄漏。 – jez
谢谢你。问题解决 – own3dh2so4
如果您要分配指向Cara
类型对象的指针数组,您可以使用:
Cara **caras = new Cara *[numElements];
如果再要分配Cara
对象本身,你可以使用:
for(int i = 0; i < numElements; ++i)
caras[i] = new Cara;
顺便说一句,我同意@ThomasMatthews,如果你已经使用C++,你应该使用'std :: vector'。 – godel9
不想使用数组,但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”。
为什么'const int ARRAY_CAPACITY = 10'而不是'#define'? –
@ Mhd.Tahawi:对不起,老习惯。 'const int ARRAY_CAPACITY = 10'也应该有效。 –
- 1. C++指针数组声明
- 2. 数组指针声明
- 3. 如何声明一个指向文件的指针动态数组
- 4. 声明指针数组字符数组
- 5. 转发声明并动态分配该声明类的指针数组?
- 6. 向前声明一个指向结构的指针数组?
- 7. 在C++中声明一个函数指针数组
- 8. 与数组指针的联合声明?
- 9. 使用双指针声明2D数组
- 10. 指针声明
- 11. 指针声明
- 12. 声明一个N指针数组返回指向函数的指针返回指向字符的指针
- 13. 如何声明指向另一个数组元素的指针数组
- 14. GLfloat动态数组声明
- 15. 声明函数指针
- 16. 声明函数指针的
- 17. 声明函数指针
- 18. 疑函数指针声明
- 19. 如何声明指向int数组的指针数组?
- 20. 数组指针动态C++
- 21. C++指针声明访问指针数组
- 22. 在循环中声明一个指针
- 23. 如何声明一个指针?
- 24. 如何声明一个指针(字节^)?
- 25. 在MIPS中声明一个指针
- 26. C++:声明指针
- 27. 声明与指针
- 28. C++指针声明
- 29. 指针Ç - 声明
- 30. 在类声明中声明一个类对象的指针
我不是100%确定你在问什么。如果您可以提供一些代码以及任何可能导致错误或意外行为的代码,这将有所帮助。 – godel9
如果我这样做:* cara = new Cara [numCaras];为了使官僚主义“caras”起作用,好吗? – own3dh2so4
您确定要“指向Caras的指针数组”而不是“指向caras数组的指针”吗?你的声明'Cara ** caras'表示前者,但是'新Cara [n]'让你后者。无论如何,除非'caras'本身已经被初始化,否则你不能将它分配给'* caras'。有关如何分配Cara指针数组的更多信息,请参阅下面的答案,或者更好地使用像vector这样的STL类。 – jez