在抽象类c的子类中使用抽象类的引用

时间:2013-11-22 03:38:08

标签: c++ inheritance

Hullo,第一次问一个问题!我有3个类,CharacterBuilder,它是一个抽象类,BullyCharacterBuilder,它继承自CharacterBuilder并重新定义它的一个函数,而Character,这是一个泛型类,包含我需要使用的访问器/ mutator的整数。

我在CharacterBuilder.h中定义了一个指向Character的指针,如下所示:

    #ifndef CHARACTERBUILDER_H
    #define CHARACTERBUILDER_H
    #include "Character.h"

    class CharacterBuilder {
    public:
        Character* getCharacter();
        void createNewCharacter();
        virtual void buildCharacter(int level) = 0;

    protected:
        Character* leeroy;

    };
    #endif

CharacterBuilder.cpp

 #include "CharacterBuilder.h"
    #include "Character.h"

    Character* leeroy;

    Character* CharacterBuilder::getCharacter() {
        return leeroy;
    }
    void CharacterBuilder::createNewCharacter(){
        leeroy = new Character;
    }

然后我在我的BullyCharacterBuilder类中公开继承CharacterBuilder:

#ifndef BULLYCHARACTERBUILDER_H
#define BULLYCHARACTERBUILDER_H

#include "Character.h"
#include "CharacterBuilder.h"

class CharacterBuilder;

class BullyCharacterBuilder : public CharacterBuilder{

    CharacterBuilder* myParent;

 void buildCharacter(int level);
};
#endif

最后,在我的BullyCharacterBuilder的cpp文件中,我尝试从Character指针调用accessor / mutators(我假设我继承自CharacterBuilder),如下所示:

#include "Character.h"
#include "BullyCharacterBuilder.h"
#include "CharacterBuilder.h"

void buildCharacter(int level){
leeroy->setAbilityScores();
}

当我尝试这样做时,我得到错误:标识符“leeroy”未定义 这可能是一个愚蠢的问题,但我尝试在stackoverflow和谷歌上使用我能想到的每个关键字组合搜索这个特殊问题。将不得不提供任何帮助!

3 个答案:

答案 0 :(得分:0)

您需要将buildCharacter实现为CharacterBuilder类

上的方法
void BullyCharacterBuilder::buildCharacter(int level)
{
  leeroy->setAbilityScores();
}

答案 1 :(得分:0)

您忘记使用您的班级名称buildCharacter限定函数BullyCharacterBuilder

void BullyCharacterBuilder::buildCharacter(int level){
leeroy->setAbilityScores();
}

答案 2 :(得分:0)

如果您输入void buildCharacter(int level)这意味着该功能是独立的,并且不属于任何类, 所以你必须这样打字 void BullyCharacterBuilder::buildCharacter(int level)告诉编译器该函数属于BullyCharacterBuilder