2013-11-22 192 views
1

你好,第一次问一个问题!我有3个类,CharacterBuilder,它是一个抽象类,BullyCharacterBuilder,它继承自CharacterBuilder并重新定义它的一个函数; Character,它是一个泛型类,包含我需要使用的访问器/增变器。使用抽象类中抽象类的引用抽象类c

我CharacterBuilder.h定义一个指针,性格像这样:

#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; 
    } 

然后我从CharacterBuilder公开继承我BullyCharacterBuilder类,像这样:

#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文件中,我a ttempt调用访问,像这样从字符指针/存取器(我假设我从CharacterBuilder继承):

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

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

当我试图做到这一点,我得到错误:标识符“leeroy”未定义 这可能是一个愚蠢的问题,但我试图在stackoverflow上搜索这个特定的问题,并使用每个关键字组合我可以想到的谷歌。将非常有义务任何帮助!

+0

您需要使用CharacterBuilder或其子项之一的方法来访问leeroy。如果你想让它成为BullyCharacterBuilder的一个方法,你不能像这样定义buildCharacter。 – Nil

回答

0

你忘了你的类名BullyCharacterBuilder来限定功能buildCharacter

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

阿哈这就是它,修正了这个问题。非常感谢,也感谢其他两位! – user3020163

0

需要实现buildCharacter作为对CharacterBuilder类中的方法

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

,如果你像这样输入void buildCharacter(int level)意义该功能是独立的,不属于任何类别,因此您必须键入这样的 void BullyCharacterBuilder::buildCharacter(int level)告诉编译器该功能属于以BullyCharacterBuilder