CodeGuard: method called on illegelly casted obejcts
-
Bei der Untersuchung meines Programms mit CodeGuard erhalte ich haufenweise die Meldung: "method called on illegelly casted obejcts". Stehen bleibt das Programm an einer simplen Zuweisung:
int Rc = SRCP_WRONGVALUE;
in der Include-Datei steht folgendes: #define SRCP_WRONGVALUE 412
Ich habe das Gefühl, es liegt an der Zuweisung der #define-Werte an die Integer-Variable. Gibt es da eine Abhilfe?
-
int Rc = static_cast<int>(SRCP_WRONGVALUE); //oder int Rc = (int)SRCP_WRONGVALUE;
-
Vielen Dank für den Tipp: Leider haben beide Arten des Castens also (int) oder static_cast<int> nichts an den Meldungen im CodeGuard geändert.
Hm, was jetzt??
-
hmm
ich kenn den compiler nicht
kann da auch nur raten.#define SRCP_WRONGVALUE int(412)ist es auch wirklich die zeile; ich hätt ja auf sowas getippt
struct A { }; struct B : public A { void Func(); }; A *a = new A; ((B *)a)->Func();
-
Sorry, ich verwende CBuilder6.
Also, diese Möglichkeit funktioniert ebenso nicht.
Ich weiß natürlich nicht, ob dies wirklich die problematische Zeile ist, aber CodeGuard hält auf ihr an.
Ich habe gerade ein Testprogramm geschrieben bei dem mit #define definierte Werte Integervariablen übergeben werden und da gibt es bei CodeGuard keine Fehlermeldung. Es scheint also mit den #define-Wertent gar nicht zu tun zu haben.Vererbung eigener Klassen habe ich bei meinem Programm nicht verwendet.
Trotzdem weiß ich jetzt immer noch nicht wie ich das Problem einkereisen soll.
Habt ihr weitere Ideen?
-
Hallo
wenn du es ändern kannst : warum nimmst du statt define nicht const int?
bis bald
akari
-
Also ich glaube inzwischen, dass mein Problem gar nichts mit den #defines zu tun hat, denn die Meldungen erschinen auch wenn ich folgendes schreibe:
int Rc = 412;
Warum bleibt CodeGuard aber immer auf dieser Zeile stehen?
-
zeig mal den codeblock oberhalb bzw. unterhalb
-
Also hier ist die Funktion, bei der CodeGuard stehen bleibt:
//--------------------------------------------------------------------------- int CBus::describeBus(int Busnr, char *Reply) { char tmpbuf[40]; int Rc = SRCP_WRONGVALUE; if (Busnr<0 || Busnr>=MAX_BUSSES) { return Rc; } switch (Busnr) { case 0: strcpy(tmpbuf,"SERVER SESSION TIME"); break; case 1: strcpy(tmpbuf,"GL POWER"); break; case 2: strcpy(tmpbuf, "GL POWER"); break; case 3: strcpy(tmpbuf, "GL POWER"); break; case 4: strcpy(tmpbuf,"GL POWER"); break; case 5: strcpy(tmpbuf,"GA POWER"); break; case 6: strcpy(tmpbuf,"GA POWER"); break; case 7: strcpy(tmpbuf,"GA POWER"); break; case 8: strcpy(tmpbuf,"FB POWER"); break; case 9: strcpy(tmpbuf,"FB POWER"); break; case 10: strcpy(tmpbuf,"FB POWER"); break; case 11: strcpy(tmpbuf,"SM");break; } sprintf(Reply,"INFO %d DESCRIPTION %s",Busnr, tmpbuf); return SRCP_INFO; } //---------------------------------------------------------------------------Reicht das? Wenn nicht was braucht ihr noch zur Beurteilung? Die gesamte Unit hat 800 Codezeilen, es scheint mir also nicht sinnvoll die gesamte Unit hier aufzuführen.
-
Sieh dich doch mal in den Borland Newsgroups um, da gibt es etliche Threads zum Thema.
Das nur als Tip, ich habe keine Ahnung, ob sich dort auch eine Lösung für deinen Fall findet.
-
was passiert, wenn du folgendes draus machst?
if (Busnr<0 || Busnr>=MAX_BUSSES) { return SRCP_WRONGVALUE; }