Probleme beim Typecast
-
Hallo zusammen,
ich habe folgende Klassen:
//Cell.h Definitionen der Klassen Cell, BaseEl und C
class Cell{
private:
Cell* next;
public:
Cell* getNext() const {return next;}
...
};Class BaseEl : public Cell{
private:
int nummer;
public:
int getNummer() {return nummer;}
...
};Class C : public BaseEl {
private:
string bem;
public:
void setBem(const string& b) {bem = b;}
const string& getBem() const { return bem;}
...
};//InhomList.h : Definition der Klasse InhomList
#include "Cell.h"
class InhomList {
private:
Cell* first;
protected:
Cell* getPos(int nr);
...
};//InhomList.cpp
#include "InhomList.h"Cell* InhomList::getPos(int nr) {
Cell pEl = first;
while(pEl != NULL &&
(nr != ((BaseEl)pEl)-> getNummer() )) //hier benötige ich einen Typecast
pEl = pEl ->getNext();
...
}Ich habe schon einiges an Klammerungen für den Typecast nach BaseEl* ausprobiert aber nichts hat funktioniert. Hat irgendjemand eine Idee was ich falsch mache?
Viele Grüße
Guido
-
Dieser Thread wurde von Moderator/in Marc++us aus dem Forum Rund um die Programmierung in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Versuch mal nen static_cast bzw dynamic_cast
static_cast<BaseEl*>(pEi); //oder dynamic_cast<BaseEl*>(pEi);Welcher besser ist, weiss ich ned, ist Situationsabhängig.
dynamic_cast macht glaub noch ne Überprüfung.
-
Danke für den Tipp,
aber mit dem dynamic_cast funktioniert es auch nicht.
Der Compiler meckert dann ->getNummer() an.
error C2446: '!=': Keine Konvertierung von 'Cell *' in 'int'Viele Grüße
Guido
-
Du sollst den Aufruf des Members auch nicht mit in den Cast packen.
dynamic_cast<Cell*>(pEl)->getNummer()
-
Hallo LordJaxom,
habe ich auch nicht.
Der Aufruf sieht bei mir folgendermaßen aus:while(pEl != NULL && (nr != dynamic_cast<BaseEl*>(pEl)->getNummer() )) pEl = pEl->getNummer();Beim compilieren bekomme ich eine warning C4541: 'dynamic_cast' für polymorphen Typ 'Cell' mit /GR- verwendet; unvorhersehbares Verhalten möglich,
sowie den error C2446Gruß Guido
-
Okay, der erste Fehler deutet darauf hin dass Du die RTTI ausgeschaltet hast. Du solltest dem Rat des Compilers folgen und /GR- nicht benutzen.
Der zweite Fehler sollte eigentlich in der Zeile nach dem IF kommen, da Du einen int (getNummer()) einem Zeiger (pEl) zuweisen möchtest - dass der Fehler im IF kommt deutet für mich darauf hin dass getNummer() keinen int zurückgibt. Denn wenn man einen Zeiger nicht auf NULL vergleichen dürfte wäre wohl der Compiler (oder seine Standardbibliothek) kaputt, also muss sich der Fehler auf den zweiten Ungleich-Vergleich beziehen. Und hier wird nur ein int mit dem Rückgabetyp von getNummer() verglichen.
-

Dankeschön, Du hattest recht.
getNummer() hat tatsächlich keinen int zurückgeliefert.Gruß Guido