回答
如果您不報告某種特定錯誤,很難說出問題所在。但是,它可以幫助你知道你可以聲明一個類:
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