在尋找二叉樹實現的示例時,我注意到代碼中提供了一些奇怪的東西here。在節點結構的構造函數一個非指針類型的變量被分配給一個指針類型。C++,將非指針類型賦值給模板類的成員指針
它編譯得很好(我正在使用GCC 5.3.0)。而讓我感到困惑的是編譯依賴於其他構造函數的參數,val。
它在類中的方法沒有效果,只是在構造函數:
我越來越template <typename T>
class Test {
Test* testPtr;
void testMethod(T t, Test<T> notAPointer) { // OK
this->testPtr = notAPointer;
}
void testMethod(Test<T> notAPointer) { // OK
this->testPtr = notAPointer;
}
Test(T t, Test<T> notAPointer) { // OK
this->testPtr = notAPointer;
}
Test(Test<T> notAPointer) { // compilation error
this->testPtr = notAPointer;
}
};
的編譯錯誤是:
invalid constructor; you probably meant ‘Test (const Test&)’
這是爲什麼發生?標準中描述的這種行爲在哪裏?
我認爲這是一個錯字。它編譯得很好,因爲所調用的構造函數沒有被調用。 – cpplearner
構造'notAPointer'參數時調用哪個構造函數? – emlai
您的構造函數的問題與指針分配或任何伴隨問題完全無關。你會得到與空的構造函數體相同的錯誤。複製構造函數無法通過值接收其參數 - 這就是它的全部內容,而這正是您的編譯器試圖告訴您的。 – AnT