Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重写accross类层次结构的成员函数_C++ - Fatal编程技术网

C++ 重写accross类层次结构的成员函数

C++ 重写accross类层次结构的成员函数,c++,C++,我定义了一个类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 我认为调用SetData2没有任何问题 其

我定义了一个类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
我认为调用SetData2没有任何问题

其中,好像您调用b.SetData;然后会有一个错误。在派生类中定义同名的方法时,同名的基类方法将隐藏在派生类中

您可以使用关键字使它们在派生类中可见


天哪,没有错误消息-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
}

我猜你可能会面对什么

错误:未解析的外部符号


按照Pavel Shved的建议编写代码

好吧,人们总是可以从读取错误开始。代码看起来是有效的。请发布准确的错误消息your get.BTW,此处哪个运算符重载?请注意,您在示例代码中所做的操作称为重写。如果你想研究这个主题,google overload override.hi我在这里重载了函数而不是运算符..代码是函数重载的,因为第二个函数的参数是int。。
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
}