2016-09-29 3 views
-3

Я новичок в программировании объектов и в C++.C++ class inheritance, identifier undefined

Я применяю то, чему учат в курсе SoloLearn C++ о наследовании класса.

Класс врага: enemy.h

class enemy 
{ 
public: 
    enemy(); 
    ~enemy(); 
    void setAttackPower(); 
protected: 
    int aP; 
}; 

enemy.cpp:

#include "enemy.h" 
#include <iostream> 
using namespace std; 

enemy::enemy() 
    { 
     cout << "constructor" << endl; 
    } 
enemy::~enemy() 
    { 
     cout << "destructor" << endl; 
    } 

int aP=0; 
void setAttackPower(int a) { 
     aP = a; 
    } 

класс ниндзя, который наследует от врага: ninja.h:

#include "enemy.h" 

class ninja: public enemy 
{ 
public: 
    ninja(); 
    ~ninja(); 
    void attack(); 
}; 

ninja.cpp:

#include "ninja.h" 
#include <iostream> 
using namespace std; 

ninja::ninja() 
{ 
} 

ninja::~ninja() 
{ 
} 

void attack() { 
    cout << "Ninja attack " << aP << endl; 
} 

и ошибка:

идентификатор "ар" не определен. Я не вижу проблемы. Может кто-нибудь мне помочь?

+2

Перед 'атакой' вы забыли' враг :: 'перед' setAttackPower' и 'ninja ::'. –

+0

'void attack()' не является членом 'ninja'. –

+0

@Pete Becker 'void attack()' - общедоступный метод, объявленный в файле заголовка ниндзя. @Alexey Guseynov Если я поставил 'враг ::' перед 'setAttackPower' и' ninja :: 'перед' атакой', Visual Studio сигнализирует мне об ошибках. – simmy

ответ

0

enemy.cpp int aP = 0; Вы создали 2 значения с одинаковыми именами: 1-й относится к классу, а 2-е значение - глобальное. Компилятор не может решить, какой из них вы пытаетесь использовать.