2013-11-22 2 views
1

Hullo, первый раз задавая вопрос! У меня есть 3 класса, CharacterBuilder, который является абстрактным классом BullyCharacterBuilder, который наследует от CharacterBuilder и переопределяет одну из его функций, а также Character, который является универсальным классом, полным int с помощью accessors/mutators, которые мне нужно использовать.с использованием ссылки из абстрактного класса в дочернем классе абстрактного класса 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 

Наконец, в файле cpp для моего BullyCharacterBuilder, я a ttempt позвонить аксессор/мутаторам от указателя символов (который я предполагаю, что я унаследовал от CharacterBuilder) как так:

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

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

При попытке сделать это, я получаю Ошибки: идентификатор «Лиры» не определен Это может быть глупый вопрос, но я попытался найти эту конкретную проблему в stackoverflow и google, используя каждую комбинацию ключевых слов, о которых я мог думать. Был бы очень обязан любой помощи!

+0

Вы должны быть в методе CharacterBuilder или одного из его детей для доступа к leeroy. Вы не можете определить buildCharacter как это, если хотите, чтобы это был метод BullyCharacterBuilder. – Nil

ответ

0

Вы забыли квалифицировать функцию buildCharacter с именем класса BullyCharacterBuilder:

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), чтобы сообщить компилятору, что функция принадлежит to BullyCharacterBuilder

Смежные вопросы