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

using reference from abstract class in a child class of abstract class c

本文关键字:抽象类 引用 子类      更新时间:2023-10-16

Hullo,第一次提问!我有三个类,CharacterBuilder,它是一个抽象类,BullyCharacterBuilder,它继承了CharacterBuilder并重新定义了它的一个函数,Character,它是充满int的泛型类,我需要使用访问器/赋值器。

我在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指针(我认为我从CharacterBuilder继承了它)调用访问器/赋值器,如下所示:

#include "Character.h"
#include "BullyCharacterBuilder.h"
#include "CharacterBuilder.h"
void buildCharacter(int level){
leeroy->setAbilityScores();
}

当我尝试这样做时,我会得到错误:标识符"leeroy"未定义这可能是一个愚蠢的问题,但我试着用我能想到的每一个关键词组合在stackoverflow和谷歌上搜索这个特定的问题。非常感谢您的帮助!

您忘记用类名BullyCharacterBuilder:限定函数buildCharacter

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

您需要在CharacterBuilder类上实现buildCharacter作为方法

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

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