Also, was ist die Sache mit den Klassen "*" in ihrem Namen (zum Beispiel Klassen ohne CPP-Datei nicht haben asterix, alle anderen tun) ?? ?
Sie müssen auf jeden Fall über Zeiger lernen. test *
und test
sind zwei völlig verschiedene Typen in C++. Hier sind zwei Variablen mit diesen Typen:
test t;
test* p;
Hier t
hat Typ test
und p
als Typ test*
. Wir beschreiben test*
als "Zeiger auf test
".
Sie können sich einen Zeiger oft als die Speicheradresse eines Objekts vorstellen. So in , da es ein Zeiger ist, könnten wir die Speicheradresse t
, die eine test
ist. Um die Adresse eines Objekts zu erhalten, verwenden wir die einstellige &
Operator, etwa so:
test t;
test* p = &t;
Beachten Sie, dass t
ist ein test
Objekt. Sie müssen nicht new test()
sagen. Hierunter unterscheidet sich C++ von anderen Sprachen, die Sie möglicherweise verwendet haben, wie C# und Java. In dem obigen C++ Code ist t
ein test
Objekt.
Sie können jedoch Objekte mit new test()
erstellen, also was ist der Unterschied?
test t;
erstellt ein test
Objekt mit automatischer Speicherdauer. Dies bedeutet, dass es am Ende seines Gültigkeitsbereichs zerstört wird (oft wird die Funktion innerhalb deklariert).
new test()
erstellt ein Objekt test
mit dynamischer Speicherdauer. Das bedeutet, dass Sie das Objekt manuell zerstören müssen, da sonst ein Speicherleck entsteht. Dieser Ausdruck gibt einen Zeiger und so kann man einen Zeiger Objekt mit ihm initialisieren:
test* p = new test();
So, jetzt lassen Sie sich auf Ihrem Problem aussehen:
test t=new test("rrr",8);
Wir wissen jetzt, dass new test("rrr", 8)
einen Zeiger auf test
zurückgibt (a test*
). Sie versuchen jedoch, es einem Objekt test
zuzuweisen. Du kannst das einfach nicht tun. Einer von ihnen ist eine Adresse und der andere ist ein test
. Daher sagt der Compiler, dass "kein geeigneter Konstruktor zum Konvertieren von test *
zu test
existiert". Macht jetzt Sinn, oder?
Stattdessen sollten Sie die automatische Speicherdauer bevorzugen. Verwenden Sie nur new
, wenn Sie wirklich brauchen. Also einfach:
Schön, Ihre Antwort ist viel besser als meine :) +1 –
tnx viel. Ich habe richtig geraten, ich habe in Java programmiert und C# so im ich etwas mit C++ zu kämpfen :) .... – klo
@klo Wenn Sie versuchen, C++ zu programmieren, wie Sie Java programmiert haben, werden Sie viele Fehler machen. Sie sind sich überhaupt nicht sehr ähnlich. – john