我目前正在爲鏈接列表類實現一個複製構造函數。當我使用另一個鏈接列表作爲參數創建類的新實例時,正在爲我作爲參數傳遞的對象調用構造函數。這讓我難以置信。下面是部分有必要了解這是怎麼回事的主要方法:在錯誤的對象上調用複製構造函數
int main()
{
LinkedList ll;
LinkedList ll2(ll);
}
所以,與其呼籲[112拷貝構造函數,用於LL拷貝構造函數被調用。在我試圖將ll複製到一個新的LinkedList中之前,我已經確認ll的大小是正確的3,即ll2。拷貝後,兩者的大小相同,大於3,但更奇怪的是,ll的拷貝構造函數被調用,而不是ll2的拷貝構造函數。由於我使用的是VC++,因此我已經通過該程序來確認這一點。
下面是LinkedList類的拷貝構造函數:
LinkedList::LinkedList(const LinkedList & other)
{
LLNode *otherCurNode = other.GetFirst();
if (otherCurNode != NULL)
{
front = new LLNode(otherCurNode->GetValue(), NULL, NULL);
back = front;
}
else
{
front = NULL;
back = NULL;
}
LLNode *curNode = front;
while (otherCurNode != NULL)
{
Insert(otherCurNode->GetValue(), curNode);
curNode = curNode->GetNext();
otherCurNode = otherCurNode->GetNext();
back = curNode;
}
numNodes = other.GetSize();
}
我的道歉,如果這最終是一個簡單的問題 - 我是相當新的C++。任何幫助將不勝感激!
從你顯示的代碼中,第一行應該爲'll'調用一個拷貝,第二行爲'll2'。你如何確定哪個副本被調用?您是否可以將您的代碼縮減爲一個簡單的,自包含的代碼片段,該代碼片段展現您認爲您所看到的行爲?很可能,將代碼拷貝到這樣的代碼片段中,你會發現你的問題。如果不是的話,你有一段完美的代碼可以回到這裏,並詢問(一個新問題)。 – sbi 2010-09-28 05:37:27
WOW。我遵循你的建議,並慢慢地將一些片段添加到一個非常基本的程序中來複制功能。然後,我再次回到我的程序上工作,Voila,問題消失了。由於我不記得修改任何代碼至少一個小時,所以我沒有想到我做了什麼,但是我要撤消一些最近的更改,以查看我是否無法弄清楚什麼是導致它... – AndyPerfect 2010-09-28 06:41:18
所以我發現了什麼問題。我的結構如下:LinkedList.h包含類聲明,LinkedList.cpp包含類中包含的所有方法的實現。 TestCases.cpp包含LinkedList.h。但是,我在LinkedList.cpp中聲明瞭LinkedList的類變量,而不是我的頭文件。我可以在三個小時看完之後向你保證,我不會再犯這個錯誤了。再次感謝你們所有的答案!你的答案幫我搞定了全部數字=) – AndyPerfect 2010-09-28 06:48:23