Kopierkonstruktor



  • 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


Anmelden zum Antworten