Rückgabewert - no copy constructor available

Winner

Erfahrenes Mitglied
Hallo zusammen! Kann mir hier jemand weiter helfen

Ich will eine Methode schreiben, die mir ein CDatabase Object zurück gibt! Dabei kommt aber immer die selbe Fehlermeldung! An includes fehlen mir keine.

Mein Code:
Code:
CDatabase CDBCONECT::connectDB(CString strDBPath) //verbindung herstellen
//------------------------------------------------------------
{
    CDatabase dbase;

//....tue was
    return dbase;
}

der fehler sieht dann so aus:

error C2558: class 'CDatabase' : no copy constructor available


Bitte um Hilfe
 
Hi,

du gibst dein lokales dbase Objekt als Wert zurück, d.h. es wird eine Kopie von dbase erstellt => der Copykonstruktur wird aufgerufen. So wie es aussieht ist aber für Objekte vom Typ CDataBase kein Copykonstruktor definiert, d.h. du solltest dbase nicht als Wert sondern als Pointer oder Referenz zurückgeben:

dbase auf dem Heap allokiert und als Pointer zurückgegeben:

C++:
CDatabase* CDBCONECT::connectDB(CString strDBPath)
{
    CDatabase *dbase = new CDatabase;
    ...
    return dbase;
}

int main()
{
  CDBCONECT cdbc;
  CDatabase *dbase = cdcb.connectDB("path");

  //mach was mit dbase und gib es danach wieder frei
  ...
  delete dbase;
}

oder als Referenz:
C++:
CDatabase& CDBCONECT::connectDB(CString strDBPath)
{
    static CDatabase dbase;
    ...
    return dbase;
}

Gruß,
RedWing
 
Zurück