error C2664: 'cannot convert parameter
-
hallo.
habe eine frage zu folgender klasse:
#include <iostream> #include <conio.h> #include <ctime> using namespace std; class cTest { public: cTest() { for (int i=0;i<3;i++) { for (int j=0;j<3;j++) Mat[i][j] = rand()%101; } } void Add (cTest A, cTest B) { for (int i=0;i<3;i++) { for (int j=0;j<3;j++) Mat[i][j] = A.GetMat(i,j) + B.GetMat(i,j); } // Contr(this); das funktioniert nicht! } int GetMat(int i,int j) { if (i>=0 && j>=0 && i<3 && j<3) return Mat[i][j]; } void SetMat(int i,int j, int zahl) { if (i>=0 && j>=0 && i<3 && j<3) Mat[i][j] = zahl; } void Contr(cTest A) { for (int i=0;i<3;i++) { for (int j=0;j<3;j++) { if(A.GetMat(i,j)>100) Mat[i][j] = 0; } } } private: int Mat[3][3]; }; int main() { int i=0; srand(time(0)); cTest A,B,C; C.Add(A,B); C.Contr(C); _getch(); return 0; }im wesentlichen geht es um zeile 25 und 60. zeile 60 will ich eigentlich nicht schreiben, weil die Contr-funktion bereits in Add aufgerufen werden soll. da gibt es aber folgende fehlermeldung:
error C2664: 'cTest::Contr' : cannot convert parameter 1 from 'cTest *const ' to 'cTest'
danke.
STICK.
-
stick_thai schrieb:
habe eine frage zu folgender klasse:
Gestellt hast du sie aber nicht

da gibt es aber folgende fehlermeldung:
error C2664: 'cTest::Contr' : cannot convert parameter 1 from 'cTest *const ' to 'cTest'
Die Fehlermeldung sagt doch ganz klar, wo das Problem ist. Contr erwartet als Parameter ein cTest, aber du übergibst cTest* const.
This has den Typ cTest* const, ist also ein Zeiger. Du brauchst aber für Contr keinen Zeiger, sondern ein Objekt. Vom Zeiger zu Objekt kommt man durch Dereferenzieren.
Diese wenigen logischen Schritte sollten dich IMHO eigentlich inzwischen nicht mehr derart überfordern.
Die Contr-Methode ist übrigens ziemlich merkwürdig. Wenn du da immer nur dasselbe Objekt übergibst, über das du die Methode aufrufst, kannst du dir den Parameter auch sparen.
-
hi MFK,
hatte eigentlich bereits meine erste nachricht editiert, aber jetzt sehe ich, dass die veränderte version gar nicht da ist. ich dachte nämlich im nachhinein, dass folgendes in zeile 25 funktionieren sollte:
Contr(*this);p.s.: an die funktion übergebe ich auch noch weitere objekte, die habe ich aber alle der übersichtshalber herausgelöscht.
-
stick_thai schrieb:
p.s.: an die funktion übergebe ich auch noch weitere objekte, die habe ich aber alle der übersichtshalber herausgelöscht.
Aber wenn dieser Parameter, den du gezeigt hast, immer das Objekt ist, über das du die Methode aufrufst, kannst du ihn trotzdem weglassen.
Ganz allgemein solltest du die Objekte auch nicht "by value", sondern als const-Referenz übergeben, um unnötige Kopien zu vermeiden.