我第一次重載下標操作符,並且在返回參考值時遇到麻煩。
我遵循C++常見問題標記的帖子的經驗法則,但有些東西我錯過了。下標操作符重載:返回引用問題
const T& operator[](int index) const {
if ((index < 0) || (index > size)) {
// provide exception handling for this error
std::cout << "Error! Index out of bound." << std::endl;
std::exit(0);
} else {
Block* b = head;
while (b) {
if (b->position == index)
return *b->data;
b = b->next;
}
}
}
我實現他們在這兩個變體:與const
返回值和const
功能(如上所述),和不具有(即除了兩個const
關鍵字相同的)。
問題是,當我運行測試主,它只是崩潰。我認爲這個bug是在return *b->data;
聲明中的,但我不能確定它可能是什麼,也不是我是否錯誤,還有其他錯誤。
任何想法?
在此先感謝。
首先,'(指數>大小)'應該是'(指數> =大小)'(或更多的 「視覺」'(大小<=指數)'),因爲我猜「索引」的有效範圍是[0,size-1](即'[0,size]')。其次,如果執行永遠不符合條件'(b-> position == index)'並在'b'變爲空時退出循環?函數不會返回任何內容,這是未定義的行爲,您也應該處理該錯誤情況。 –
@gx_你有任何建議來處理沒有返回值的情況嗎?我已經考慮過這個錯誤,但是稍後修復。 – Overflowh
我不知道你的代碼的內部...如果這應該在邏輯上不會發生(即如果對於每個有效的'索引'應該存在一個'塊'中的一個相同的'位置'你的(似乎是一個)我猜你可以在'while'主體之後(或者在函數主體結束之前)發出一個斷言(或者打印一個錯誤並且像上面那樣退出)。在你這樣做之後,再加上我的第一條評論的修復,你的程序還會崩潰嗎?和/或它打印一些錯誤信息? –