2013-11-22 307 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