簡體   English   中英

過載下標運算符不返回指針

[英]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_tstd::vector<Node*>::size_type


此外,鑒於這個問題被標記為 ,我應該指出引用空指針的正確方法是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM