locked
Tiefe Kopien von globalen Variablen RRS feed

  • Frage

  • Hallo zusammen,

    ich habe bei einem Projekt ein kleines Problem und hoffe dass ihr mir weiter helfen könnt.

    Ich möchte eine Instanz klonen, die auch dauerhaft existiert. Dazu habe ich mir einen KopierKonstruktor gebaut.

    Allerdings bekomme ich folgende Fehlermeldung, beim Aufruf des Kopierkonstruktors:

    error C2064: Ausdruck ergibt keine Funktion, die 1 Argumente übernimmt

     

    Wenn ich nun die geklonte Instanz lokal erzeuge tritt der Fehler nicht mehr auf, und funktioniert auch einwandfrei.

    Die Instanz muss nun aber global sein. Kann mir jemand sagen, wie ich das hinkriege?

     

    Hier ein kleines Beispiel, wie ich das meine:

    Hierbei möchte ich  ein Objekt von Klasse A in Klasse B erzeugen und dort das Klon erzeugen.

    #pragma once
    
    class A
    {
    public:
    
    	//Konstruktor
    	A(void);
    
    	//Kopierkonstruktor
    	A(const A& other);
    	
    	~A(void);
    
    	void setlaenge(int l);
    	void setbreite(int b);
    
    private:
    	int laenge;
    	int breite;
    };
    
    
    #include "StdAfx.h"
    #include "A.h"
    
    A::A(void)
    {
    	laenge = 5;
    	breite = 7;
    }
    
    A::A(const A& other)
    {
    	//int laenge = new int();
    	//int breite = new int();
    
    	this->laenge = other.laenge;
    	this->breite = other.breite;
    }
    
    A::~A(void)
    {
    }
    
    void A::setlaenge(int l)
    {
    	laenge = l;
    }
    
    void A::setbreite(int b)
    {
    	breite = b;
    }
    
    
    
    #pragma once
    #include "A.h"
    
    class B
    {
    public:
    	B(void);
    	~B(void);
    
    	void KopierDas(void);
    
    private:
    	A* m_A;
    	A Kopie;
    	
    };
    
    
    
    
    
    #include "StdAfx.h"
    #include "B.h"
    
    B::B(void)
    {
    	this->m_A = new A();
    }
    
    B::~B(void)
    {
    }
    
    void B::KopierDas(void)
    {
    	Kopie(*m_A);	
    
    	Kopie.setlaenge(1);
    	Kopie.setbreite(2);
    
    }
    
    

    Montag, 4. April 2011 13:27

Antworten