Kopierkonstruktor
-
Also ich habe folgendes Problem gerade und bin verwirrt.
Wenn ich eine Klasse habe und davon ein Objekt mit den namen test erzeuge.
Wie kann ich durch Kopierkonstruktoren im main den gleichen Objektnamen verwenden ohne das ein Fehler kommt? Macht man das mit Zeigern???Ich weiß nur wie man ein Kopierkonstruktor erstellt:
Person::Person( const Person &src )
-
struct Foo { Foo(int i) : bar(i) {} Foo(const Foo &src) : bar(src.bar) {} ~Foo() {} private: int bar; }; //weiter unten Foo f(7); //f.bar ist 7 Foo f2(f); //f2.bar ist auch 7
-
Ja, das ist soweit richtig, nur mußt du der Klasse auch mitteilen, daß sie einen Kopierkonstruktor hat:
class Person { public: Person(const Person&); } Person::Person(const Person& other) { //initialisiere mit den Elementen von 'other' } int main() { Person p1; //verändere p1 Person p2=p1;//<-verwendet Copy-Ctor ...
-
Ok danke ich habe es jetzt verstanden.
-
Bei mir brintg er Fehlermeldungen die ich nicht verstehe. Kann mir jemand da mal weiterhelfen.
#include <iostream> using namespace std; class Lawamat{ private: bool aktiv; bool buntwaesche; bool schleudern; int waschmenge; string eingabe; public: Lawamat(); Lawamat( const Lawamat & ); ~Lawamat(); void einschalten(); void auswahl(); void copy(); void paste(); }; //Methode einschalten void Lawamat::einschalten(){ aktiv = true; } //Methode auswahl (wurde bisschen geändert, die Einstellungen werden hier eingegeben und stehen nicht davor schon zur verfügüng. Beeinflusst die Methode paste! Aber funktioniert trotzdem!) void Lawamat::auswahl(){ int zustand=0; if (aktiv!=true) {} else { cout << "Waschart: (1) Buntwaesche ; (2) Wolle " << endl; cin >> zustand; if(zustand==1){buntwaesche=true;} else buntwaesche=false; cout << "Schleudern? (1) Ja ; (2) Nein " << endl; cin >> zustand; if(zustand==1){schleudern=true;} else schleudern=false; cout << "Waschmenge: "; cin >> zustand; waschmenge = zustand; cout << endl << endl; } } //Methode copy void Lawamat::copy() { if(aktiv!=true){} else { string waschart1,waschart2,eingabe; int menge; if(buntwaesche == true) { waschart1 =" \"Buntwaesche\""; } else { waschart1 =" \"Wolle\""; } if(schleudern == true) { waschart2 ="\"Schleudern\""; } else { waschart2 ="\"Nichtschleudern\""; } menge = waschmenge; char daten[100]; sprintf(daten, "%i", waschmenge); eingabe = daten; eingabe.append(" kg Waesche wurde als Waschmenge eingestellt.\n\n"); eingabe.append("Als Waschart wurde "); eingabe.append(waschart1); eingabe.append(" ausgewaehlt.\n\n"); eingabe.append(waschart2); eingabe.append(" wurde ausgewaehlt.\n\n"); cout << eingabe.data(); // nur zur Verdeutlichung } } //Methode paste void Lawamat::paste () { if(aktiv!=true){} else { string waschart1,waschart2,eingabe; int menge; if(buntwaesche == true) { waschart1 =" \"Buntwaesche\""; } else { waschart1 =" \"Wolle\""; } if(schleudern == true) { waschart2 ="\"Schleudern\""; } else { waschart2 ="\"Nichtschleudern\""; } menge = waschmenge; char daten[100]; sprintf(daten, "%i", waschmenge); eingabe = daten; eingabe.append(" kg Waesche wurde als Waschmenge eingestellt.\n\n"); eingabe.append("Als Waschart wurde "); eingabe.append(waschart1); eingabe.append(" ausgewaehlt.\n\n"); eingabe.append(waschart2); eingabe.append(" wurde ausgewaehlt.\n\n"); } } //Kopierkonstruktor Lawamat::Lawamat(const Lawamat &src) { aktiv=src.aktiv; buntwaesche=src.buntwaesche; schleudern=src.schleudern; waschmenge=src.waschmenge; eingabe=src.eingabe; } int main(){ //main wurde zur test eingefügt! Lawamat test1; test1.einschalten(); test1.auswahl(); test1.copy(); test1.paste(); //Kopierkonstruktor verwenden Lawamat test2=test1; test2.einschalten(); test1.auswahl(); return 0; }
-
Bei mir brintg er Fehlermeldungen die ich nicht verstehe
Und ich verstehe nicht, wie man ne halbe Seite Code OHNE die Fehlermeldungen posten kann!
-
Delikanli schrieb:
Bei mir brintg er Fehlermeldungen die ich nicht verstehe.
Sag einfach welche und den entsprechenden Codeausschnitt, nicht alles. Keiner hat Lust das alles durchzulesen.
<edit> Nun war ich auch noch zu langsam
</edit>Gruß
-
Also die Kopierkonstruktoren Funktionieren nicht.
Fehler:Nichtaufgeloestes externes Symbol "public: __thiscall Lawamat::~Lawamat(void)" (??1Lawamat@@QAE@XZ)Nachdem ich die Sachen eingefügt habe hat es nicht mehr funktioniert
[cpp]
public:
Lawamat(); //==========habe ich eingefügt===========
Lawamat( const Lawamat & ); //==========habe ich eingefügt===========
~Lawamat(); //==========habe ich eingefügt===========
void einschalten();
void auswahl();
void copy();
void paste();};
...
....//Kopierkonstruktor
Lawamat::Lawamat(const Lawamat &src) //==========habe ich eingefügt===========
{
aktiv=src.aktiv;
buntwaesche=src.buntwaesche;
schleudern=src.schleudern;
waschmenge=src.waschmenge;
eingabe=src.eingabe;
}...
...
//Kopierkonstruktor verwenden //==========habe ich eingefügt===========
Lawamat test2=test1;
test2.einschalten();
test1.auswahl();...
..
[cpp]
-
Der Kopierkonstruktor ist in Ordnung, aber der Default-Konstruktor ist nicht implementiert.
Lawamat::Lawamat(){}
-
Denn habe ich eingefügt, aber dann bringt er wieder Fehlermeldungen:
Linker-Vorgang läuft...
Aufgabe2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall Lawamat::~Lawamat(void)" (??1Lawamat@@QAE@XZ)
Debug/block3yasin.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
-
Diesmal isses der Destruktor...
-
Ok jetzt gehts. Ich fisch habe meine Klasse Falsch geschrieben Danke für deine Hilfe. Jetzt klappt alles bye