Dostałem zadanie napisania listy dwukierunkowej obiektowo. Co do samego zadania nie mam pytań, jednak podczas jego realizacji otrzymuje dziwne wyniki używając środowiska Microsoft Visual Studio 2015 community. Poniżej przedstawiam kod:
#include <iostream>
//#include <conio.h>
#include <string>
using namespace std;
class ListElement {
int key;
ListElement* next;
ListElement* prev;
friend class List;
public:
ListElement* Element(int key);
int getKey();
ListElement(int k);
};
class List {
ListElement* firstElement;
int size;
friend class ListElement;
public:
void addToBeginning(int key);
void addToEnd(int key);
ListElement* getElement(int key);
bool contains(int key);
void remove(int key);
void clearAll();
void printList();
};
int main() {
List* list = new List();
list->addToEnd(3);
list->addToEnd(5);
return 0;
}
//konstruktory
ListElement::ListElement(int k) {
this->key = k;
this->next = NULL;
this->prev = NULL;
}
void List::addToEnd(int key) {
if (this->firstElement) {
ListElement element(key);
ListElement *tmp = this->firstElement;
cout << tmp << endl;
cout << tmp->key << endl;
cout << tmp->next << endl;
}
else {
ListElement element(key);
this->firstElement = &element;
cout << this->firstElement << endl;
cout << this->firstElement->key << endl;
cout << this->firstElement->next << endl;
}
}
Powyższy kod ma dodać na koniec listy 3 oraz wypisać: adres tego elementu, klucz elementu (czyli liczbe 3) oraz adres następnego elementu, po czym wstawiając liczbę 5 odnieść się ponownie do pierwszego elementu i zrobić dokładnie to samo.
Wyniki z konsoli (używając VS):
001BF640
3
00000000
001BF640
-858993460
CCCCCCCC
Wyniki z ideone.com:
0xbfc8a930
3
0
0xbfc8a930
3
0
Wartości z ideone są wartościami oczekiwanymi... Mógłby ktoś mi pomóc i wyjaśnić, dlaczego wyjścia nie są takie same?