2014-03-04 98 views
-1

我正在使用類在C++中實現遞歸數據結構。特別是在使用「this」指針時,我遇到了一些麻煩。C++中的遞歸數據結構

在一個函數中,我需要修改「this」指針。但是這是不允許的。我該怎麼做?我在某處讀到你需要傳遞「this」指針來改變它。但我不清楚這一點。這是否像蟒蛇的「自我」?一個例子將是巨大的

編輯:

void insert(int key) 
{ 
    if (head == NULL) 
    { 
     /* I need to insert in beginning of structure */ 
     List* tmp; 
     tmp->key = key; 
     tmp->next = this; 
     this = tmp; /* This does not work */ 
    } 
} 

謝謝!

+1

爲什麼你需要修改這個?你能舉一個你想要做什麼的例子嗎?這是非常抽象的。 – Borgleader

+0

這是XY或者只是一個構造不好的問題,(我希望:)。 –

+0

添加了我正在嘗試執行的示例。基本上實現一種列表,我在插入列表開始時遇到錯誤。查看示例代碼。 – clereamusjd

回答

1

您不能修改this期間。您需要重新構建您的程序,以便您不需要那樣做。

2

您不能修改this指針,因爲它的行爲如同聲明爲T* const。你可以做的是在類內部保存一個指向你自己類型的指針,並修改它。

class foo 
{ 
    /* ... */ 
private: 
    foo* p; // this can be modified 
}; 
0

插入你想要的方式,最好的方法是創建一個雙向鏈表,沒有一個(只下一個指針)。換句話說,您應該有一個指向列表中前一個節點的前一個指針,以便使用該指針正確插入。否則你需要從這個父節點插入。

即具有雙向鏈表:

Node* tmp = new Node; 
tmp->key = key; 
this->previous->next = tmp; 
tmp->previous = this->previous; 
tmp->next = this; 
this->previous = tmp; 

編輯: 不要忘記,「這」是「」簡單「」一個內存地址,所以你想改變的是什麼包含在它的。