代码之家  ›  专栏  ›  技术社区  ›  Ashish

重写跨类层次结构的成员函数

c++
  •  -3
  • Ashish  · 技术社区  · 16 年前

    我定义了一个类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
    
    3 回复  |  直到 12 年前
        1
  •  4
  •   P Shved    16 年前

    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
    }
    
        2
  •  1
  •   aJ.    16 年前
    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
    }
    
        3
  •  0
  •   Satbir    16 年前

    我猜你可能会面对什么

    错误:无法解析的外部符号

    按照Pavel Shved的建议编写代码