从SuperClass C调用子类方法

时间:2013-08-16 19:20:31

标签: c++

我有一个SuperClass“BoardMain”和6个成员,它们是这个主要功能的子类。

但是,当我尝试在其中一个子类中调用Specific函数时,我收到错误

“无法分配抽象类型的对象”

我只能访问“BoardMAin”超类,它应该调用其中一个子类中的特定函数。

请帮助

Class Someother
{
  Boardmain.functionA();
}


class BoardMain
{
functionA 
{
   B();
}

}

Class B1:public BoardMain() 
{
B(){
}
}

2 个答案:

答案 0 :(得分:2)

我将尝试解释代码中的所有错误:

Class Someother
{
    Boardmain.functionA(); // Error 1
}


class BoardMain
{
    functionA // Error 2
    {
       B();   // Error 3
    }

}

Class B1:public BoardMain() // Error 4
{
    B(){ // Error 5
    }
}

错误1

你正在一个类中直接调用一个方法,这在C ++中是不可能的。从方法中调用它。

在尝试静态地从另一个类调用方法之后,我的意思是不在对象的实例上。在这里你必须选择:

  • 使用关键字Boardmain
  • static类中静态声明此方法
  • 创建Boardmain的实例并调用方法,例如:

    class Someother
    {
    public:           // public accessibility
        Someother()   // Constructor of the class
        {
            Boardmain obj;     // Object creation
            obj.functionA();   // Calling the method
        }
    };
    

最后一点,在您声明类Someother的时候,编译器仍然不知道类Boardmain ......这里会给你一个错误......

错误2

你声明一个没有return-type且没有参数的函数,这在C ++中是不可能的。至少构造函数需要()

这个例子是正确的:

class BoardMain
{
    void functionA() // Does not return anything and does not take argument
    {
    }
};

错误3

你正在调用一个名为B的函数,但......它是什么?在B1

中声明的方法

错误4

当一个类从另一个继承时,正确的声明是:

class B1:public BoardMain  // no () a the end

错误5

您再次没有正确声明此方法。如果您希望它是一个构造函数,它应该与该类具有相同的名称:

class B1 : public BoardMain
{
    B1(){    // Private constructor
    }
};

顺便说一下,class关键字在C ++中以小写字母始终。在class声明的末尾有分号。


你应该买一本好书来学习C ++,看来你需要它。

以下是有关classhttp://www.cplusplus.com/doc/tutorial/classes/

的文档

答案 1 :(得分:0)

您应该为要实例化的派生类实现所有基类的所有纯虚方法。

您的错误消息表明代码中的某些情况并非如此(您尚未向我们展示)。