Ich versuche, ein dynamisches Array von Zeigern zu einer Anzahl von Instanzen einer Klasse ElectricityBill
zu erstellen.Dynamisches Array von Klassenzeigern
Mein aktueller Ansatz besteht darin, ein dynamisches Array von ElectricityBills (derzeit mit nichts) zu erstellen, dann eine einzelne Instanz einer ElectricityBill zu erstellen, eine weitere Reihe von ElectricityBills zu erstellen, diesmal größer, alle Instanzen des alten dynamischen Arrays zu kopieren über, fügen Sie das neue am Ende hinzu.
Der Code von dem, was ich versucht habe, ist unter
// Define the dyn array
int EBcount = 0;
ElectricityBill **EB = new ElectricityBill*[EBcount];
// Create a temp instance and input the data
ElectricityBill *tempEB = new ElectricityBill;
std::cin >> *tempEB;
std::cout << *tempEB << std::endl;
// Create a new dyn array and copy the instances accross
EBcount++;
ElectricityBill **temp = new ElectricityBill*[EBcount];
for (int i = 0; i < EBcount-1; i++) {
temp[i] = EB[i];
}
// Append the new instance at the end and delete the old array
temp[EBcount-1] = tempEB;
delete [] EB;
EB = temp;
std::cout << temp[0] << std::endl;
std::cout << EB[0] << std::endl;
und der Ausgang ist
E;name;1;2;3;acc;add;1/1/2000;1/2/2000;22.721;2.2721
0x100500000
0x100500000
Es erwähnenswert ist, dass ich die Betreiber <<
und >>
innerhalb der Klassendefinition überlastet haben. Der >>
Operator fordert den Benutzer auf Daten und speichert Eingangsdaten innerhalb der Klasse des privaten Bereich von Variablen einzugeben, und die <<
Operator wie so gebaut:
std::ostream& operator<<(std::ostream &stream, ElectricityBill &printStream) {
stream << "E;"
<< printStream.billerName << ";"
<< printStream.billerCode << ";"
<< printStream.referenceNumber << ";"
<< printStream.accountNumber << ";"
<< printStream.accountName << ";"
<< printStream.address << ";"
<< printStream.periodStartDate.day << "/" << printStream.periodStartDate.month << "/" << printStream.periodStartDate.year << ";"
<< printStream.periodDueDate.day << "/" << printStream.periodDueDate.month << "/" << printStream.periodDueDate.year << ";"
<< printStream.amountDue << ";"
<< printStream.totalGST;
return stream;
}
Aus irgendeinem Grund wird der Ausgabespeicher ausgibt Adressen anstelle der erwartete Daten. Warum passiert das und was kann ich tun, um es zu beheben?
Der zweite Parameter zu 'Operator <<' sollte eine const Referenz, nicht nur eine Referenz sein. All dies wird bereits von 'std :: vector' übernommen. – PaulMcKenzie
Ich hätte 'std :: vector' benutzt, aber das ist für eine Uni-Zuweisung und wir dürfen sie leider nicht verwenden. Es ist nichts als erste Prinzipale hier:/ – SteppingHat
Ich denke es ist Zeit, Universitäten zu haben 1) Haben Sie 'std :: vector' oder 2) Haben Sie eine legitime dynamische Array-Klasse geschrieben, anstatt Zeiger überall in einem zu werfen Hauptfunktion. Zumindest bei letzterem lernen Sie etwas über das richtige Verwalten von Zeigern. – PaulMcKenzie