operator+ をオーバーロードしているときに奇妙なことが起こりました
単方向リストがあり、operator+ と operator= をオーバーロードしました
これが両方の私の実装です(編集:insertFrontとコピーコンストラクターを使用):
AnyList::AnyList(const AnyList& list)
{
count = list.getCount();
first = list.getFirst();
AnyList a;
a.setFirst(first);
a.setCount(count);
Node *current = first;
for (int i = 0; i < count; ++i)
{
a.insertFront(current->getData());
current = current ->getLink();
}
}
-
void AnyList::insertFront(int value)
{
Node *newNode = new Node;
newNode -> setData(value);
newNode -> setLink(first);
first = newNode;
++count;
}
AnyList AnyList::operator+ (const AnyList& list) const
{
Node *current = first;
Node *listCurrent = list.getFirst();
int sumHolder = 0;
AnyList temp;
while(current != NULL)
{
sumHolder = current ->getData() + listCurrent ->getData();
temp.insertFront(sumHolder);
current = current ->getLink();
listCurrent = listCurrent ->getLink();
}
return temp;
}
AnyList& AnyList::operator=(const AnyList& rightSide)
{
if(&rightSide != this)
{
Node *travel = rightSide.getFirst();
first = rightSide.getFirst();
Node *original = first;
while (travel != NULL)
{
original ->setData(travel ->getData());
original ->setLink(travel ->getLink());
travel = travel->getLink();
original = original ->getLink();
}
}
return *this;
}
主なものは次のとおりです。
AnyList mylist;
AnyList mylist2;
for (int i = 0; i < 10; ++i)
{
mylist.insertFront(i);
}
for (int i = 10; i < 20; ++i)
{
mylist2.insertFront(i);
}
mylist.print();
cout << endl << endl;
mylist2.print();
cout << endl;
AnyList sumList = mylist + mylist2;
sumList.print();
cout << endl;
私の出力は次のとおりです(これは私が望んでいた出力です):
9 8 7 6 5 4 3 2 1 0
19 18 17 16 15 14 13 12 11 10
10 12 14 16 18 20 22 24 26 28
だから、私の質問は、私が代わりに書くときです:
AnyList sumList;
sumList = mylist + mylist2;
sumList.print();
print 関数に入り、関数 getData() からデータを返そうとすると、不正なアクセス エラーが発生します。
なぜこれが事実なのか、私にはまったくわかりません。どんな助けでも大歓迎です!
ありがとう!