我目前正在为链接列表类实现一个复制构造函数。当我使用另一个链接列表作为参数创建类的新实例时,正在为我作为参数传递的对象调用构造函数。这让我难以置信。下面是部分有必要了解这是怎么回事的主要方法:在错误的对象上调用复制构造函数
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