Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Kopier-Konstruktor

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.02.2005, 11:56 Uhr
~partisan
Gast


Hi,

ich habe mir eben eine kleine Testklasse gebastelt um die Aufrufe der Konstruktoren zu verstehen. Dazu folgender Code Abschnitt:


C++:

#include <iostream>

using namespace std;

class Kang
{
    public:

    int groesse;

    Kang()
    {
        groesse=1;
        cout << "Standard-Konstruktor" << endl;
    }

    Kang(int i)
    {
        groesse=i;
        cout <<"Konvertierungs-Konstruktor" << endl;
    }

    Kang(Kang& rhs)
    {
        groesse=rhs.groesse;
        cout << "Kopier-Konstruktor" << endl;
    }
};

void f(Kang k) { } //leere Funktion

int main(void)
{
    f(3); // hier der Fehler
    cout << endl;
    return 0;
}




Doch leider hat der Compiler damit folgendes Problem:
test6.cpp: In function `int main()':
test6.cpp:42: error: no matching function for call to `Kang::Kang(Kang)'
test6.cpp:28: error: candidates are: Kang::Kang(Kang&
test6.cpp:22: error: Kang::Kang(int)
test6.cpp:42: error: initializing temporary from result of `Kang::Kang(int)'

Wenn ich jedoch meinen eigenen KopierKonstruktor loesche, funktioniert das ganze wieder. Obwohl doch der Compiler, dann seinen eigenen Kopierkonstruktor mit der selben Angabe bis auf die Ausgabe erstellen müsste. Oder seh ich da etwas falsch?

Gibt es eine Möglichkeit meinen eigenen Kopierkonstruktor mit einzubauen, so dass diese implicite Umwandlung funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.02.2005, 12:23 Uhr
~partisan
Gast


Das Problem hat sich eben erledigt.
Wenn ich meinen Kopierkonstruktor eine const Referent übergebe funktioniert es wieder.


C++:
    Kang(const Kang& rhs)
    {
        groesse=rhs.groesse;
        cout << "Kopier-Konstruktor" << endl;
    }



Jetzt muss ich nur noch darueber nachdenken wieso.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.02.2005, 12:36 Uhr
enno-tyrant
Frag nicht!


ich würde dir aber dennoch empfehlen die eigenschaften wie:

Code:
int groesse;



in den 'private-bereich' zu legen.


Zitat von ~partisan:
...Jetzt muss ich nur noch darueber nachdenken wieso.


schätze mal es ist im standard-c so vorgeschrieben ist
--
...um etwas zu verstehen muß man wissen wie es funktioniert...

Dieser Post wurde am 13.02.2005 um 12:37 Uhr von enno-tyrant editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: