2016-12-01 2 views
0

Ich brauche eine Datenbankverbindung zu einem neuen Objektinstanz zu übergeben. Der folgende Code funktioniert jedoch nicht wie gewünscht.C++ einen Verweis auf Eigenschaft in Konstruktor zuweisen

class child { 
    public: 
    db_connection Con; 
    child(db_connection& Con); 
}; 

child::child(db_connection& Con) { 
    this->Con = Con; 
} 

Die Zuordnung in Konstruktor wirft diesen Fehler: Verwendung von gelöschten Funktion ....

Ich weiß, das bedeutet, es Konstruktor db_connection ruft neues Objekt der Con zu erstellen. Aber das möchte ich nicht haben.

Und ich kann nicht die Eigenschaft ‚Con‘ in Klassendeklaration als

class child { 
    public: 
    db_connection& Con; 
    ... 

erklären Da eine Referenz muss initialisiert oder zugeordnet werden. Das ist eine schwierige Situation.

Antwort

4

Wie Sie bemerkt haben, um eine Referenz verwenden zu können, müssen Sie initialisieren es. Dafür sollten Sie einen Konstruktor Initialisiererliste verwenden:

class child { 
    db_connection& Con; 

    public: 
    child(db_connection& con) : Con(con) 
    {} 
    ... 
}; 

Das die Membervariable initialisiert, anstatt innerhalb der Konstruktor zuweisen.

+0

wie etwa in 2 oder mehr Variablen vorbei? : Con (Con), Var (Var), ...? – johnlowvale

+0

oh ich fand es, Komma getrennt – johnlowvale

+0

es ist immer noch "Verwendung von gelöschten Funktion ...": Fehler: Verwendung von gelöschten Funktion 'mongocxx :: v_noabi :: Client :: Client (konst mongocxx :: v_noabi :: client &)' Db_Client (Db_Client _), Anfrage (Anfrage _), Antwort (Antwort_) – johnlowvale

1

Wenn child darf Eigentum der Verbindungsinstanz, um es auf dem Bau übergeben nehmen, dann könnte man verwenden, um einen bewegen Konstruktor:

child(db_connection&& Con_) : Con(std::move(Con_)){}

, die einen Wert Kopie vermeidet und das Potenzial einer baumelnden Referenz. Dies macht die Con_ ungültig, die an den Konstruktor übergeben wird.

+0

ja, der Variable Gang in der Öffentlichkeit ist – johnlowvale

+0

In diesem Fall wird diese Antwort als eine Falltür in einem Kanu ungefähr so ​​nützlich ist. Ich lasse es aber, wie es in anderen Fällen nützlich sein könnte. – Bathsheba

+0

Diese Tatsache ist beängstigend: "Dies macht die Con_ ungültig, die an den Konstruktor übergeben wird." Der ursprüngliche Besitzer der Variablen kann diese Variable nicht mehr verwenden? scheint nicht in der Lage zu sein, das gleiche Con_ an das zweite Kind zu übergeben – johnlowvale

Verwandte Themen