[英]overload subscript operator does not return pointer
在我的課堂上,我有一個成員變量std::vector<node*>
children
我想重載下標運算符,以便我可以輕松索引其中一個節點。
這是我的班級減速功能:
node* operator[](int index);
這是我對該函數的類定義:
node* class_name::operator[](int index){
return children[index];
}
但是,這個函數似乎沒有像我希望的那樣返回指針。
這是給我帶來麻煩的功能:
void Print_Tree(node* nptr, unsigned int & depth){
if (NULL == nptr) {
return;
}
//node display code
for (int i = 0; i < nptr->Number_Of_Children(); ++i){
Print_Tree(nptr[i],depth+1); //<- Problem Here!
}
//node display code
return;
}
我得到的錯誤是:
錯誤:在遞歸調用時無法將“node”轉換為“node *”
我不明白為什么當我想要一個指向節點的指針時它會給我一個節點。
我的重載功能有問題嗎?
我嘗試在遞歸調用中取消引用該節點:
Print_Tree(*nptr[i],depth+1);
Print_Tree(*(nptr[i]),depth+1);
Print_Tree(nptr->[i],depth+1);
無濟於事!
我究竟做錯了什么?
您正在尋找正確位置的問題,但三次修正嘗試的語法仍然有些錯誤。
nptr
是指向Node
對象的指針,因此您無法直接應用索引運算符(如果這樣做,編譯器將假定它指向Node
數組的開頭並跳轉到第i個條目)。
相反,您需要首先取消引用指針,然后應用索引運算符。 使用括號來確定此順序:
Print_Tree((*nptr)[i],depth+1);
另外,使用int
作為向量索引的數據類型略有不正確。 最好使用std::size_t
或std::vector<Node*>::size_type
。
此外,鑒於這個問題被標記為c ++ 11 ,我應該指出引用空指針的正確方法是nullptr
,而不是NULL
。
即使讓operator[]
返回指針確實合法,但更好的設計(並符合標准類的期望)來返回引用。 然后,您可以按如下方式獲取該引用的地址:
node& class_name::operator[](int index){
return *(children[index]);
}
然后將其用作:
Print_Tree(&(*nptr)[i],depth+1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.