我需要澄清调用方法,我有一个基类,我尝试使用派生类对象调用派生类函数。是否有可能
请告诉我,我的代码中有什么错误
#include "stdafx.h"
#include <malloc.h>
class derived;
class base
{
public:
base()
{
}
~base()
{
}
void setdptr(derived* dptr)
{
m_dptr = dptr;
dptr->sayHello();
}
virtual void addfunc()
{
printf("base class add");
}
derived *m_dptr;
};
class derived : public base
{
public:
derived()
{
}
~derived ()
{
}
void addfunc()
{
printf("derived class add");
}
void sayHello()
{
printf("Say Hello");
}
void setDeriveToBase()
{
setdptr(this);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
derived dp;
dp.setDeriveToBase();
return 0;
}
答案 0 :(得分:1)
那是什么问题
void setdptr(derived* dptr)
{
m_dptr = dptr;
dptr->sayHello();
}
是非法的。你只向derived
提供一个前向声明,所以你不能使用它的任何方法,因为除了它之外,编译器对该类一无所知。
您需要将声明与实现分开,将实现移到cpp
文件中,并在该文件中包含定义derived
的标头。
但是从基类调用派生方法是代码味道,你不应该这样做。
答案 1 :(得分:1)
在类setdptr
的{{1}}函数中,您还没有定义base
类,因此编译器还不知道{{1}中的成员是什么}。
将derived
的实际定义移至derived
声明之后,它应该有效。
这样的事情:
setdptr