Probleme mit dynamic_cast

napstermania

Mitglied
Hallo,

ich habe mal eine kleine Testapplikation geschrieben, in der ich das Verhalten des dynamic_cast verdeutlichen will.

Code:
//	Interface
class IBase
{
public:
	virtual void testBase(char* c, int i)=0;
};

// Baseclass
class Base
{
public:
	/*
	virtual void testBase(char* c, int i)
	{ 
		m_c = c; 
		m_i = i; 
	}
	*/
	virtual void Test()
	{
	}
	
	char *m_c;
	int m_i;
};

// Subclass I
class SubA : public Base, IBase
{
public:
	void testBase(char* c, int i)
	{ 
		m_c = c; 
		m_i = i; 
	}
};

// Subclass II
class SubB : public SubA
{
public:
	virtual void testBase(char* c, int i)
	{ 
		m_c = c; 
		m_i = i; 
	}
};

// entry point
int main(int argc, char* argv[])
{
	Base *pB, *pA;
	
	pA = new SubA;
	pB = new SubB;

	IBase *pa = dynamic_cast<IBase*>(pA);
	IBase *pb = dynamic_cast<IBase*>(pB);

	return 0;
}

Ich implementiere In der Kindklasse 'SubA' das Interface 'IBase' und meine Basisklassse 'Base'. Nun will ich einen downcast auf mein interface machen um zu sehen ob meine Klasse SubA das Interafce implementiert. Aber wenn ich das versuche bekomme ich nur Null-Pointer. Wo liegt hier das Problem das es nicht geht? Kann es an der Mehrfachvererbung liegen? Danke schon mal im voraus.

Mfg napi
 
Hi.

Du hast die Klasse IBase "private" vererbt - deswegen ist es nicht erlaubt einen Downcast von SubA oder SubB zu IBase zu machen.

C++:
class SubA: public Base, public IBase {
Gruß
 
Zurück