我已经定义了一个A类并从A派生了一个新的B类。 我在B类中重载了SetData()函数。 当我尝试使用B的对象访问B类的SetData函数时,编译器不允许它。为什么会这样?
class A{
public :
void SetData();
};
class B : public A {
public:
void SetData(int);
};
B b;
b.SetData() ; // error
答案 0 :(得分:4)
OMG,没有错误消息。 -1对你而言。
但是让我们使用心灵感应并猜测你的错误信息。你得到类似“找不到符号”的东西,因为你试图调用一个没有正文的函数B::SetData()
。它必须有一个身体,即使它什么都不做,即使它在父类中声明!尝试将其添加到班级的正文中
class B : public A {
public:
void SetData(int)
{ /* add body here */ };
};
或在它之外
class B : public A {
public:
void SetData(int);
};
void B::SetData(int)
{
//write it here
}
答案 1 :(得分:1)
b.SetData(2) ; // error
我在调用SetData(2)
时没有看到任何问题。
如果您致电b.SetData() ;
,则会出现错误。在派生类中定义具有相同名称的方法时,具有相同名称的基类方法将隐藏在派生类中。
您可以通过using
关键字在派生类中看到它们。
class A{
public :
void SetData(){}
};
class B : public A {
public:
using A::SetData;
void SetData(int){}
};
int main()
{
B b;
b.SetData() ; // error
}
答案 2 :(得分:0)
我想你可能会面对
错误:未解析的外部符号
根据Pavel Shved的建议编写代码