2016-09-29 198 views
-3

我是新來的對象編程和c + +。C++類繼承,標識符未定義

我正在應用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; 
} 

和錯誤是:

標識符 「AP」 是未定義的。我看不到問題。誰能幫我?

+2

在'attack'之前''setAttackPower'和'ninja ::'之前已經忘了'enemy ::'。 –

+0

'void attack()'不是'ninja'的成員。 –

+0

@Pete Becker'void attack()'是一個在忍者頭文件中聲明的公共方法。 @Alexey Guseynov如果我在'attack'之前把'enemy ::'放在'setAttackPower'和'ninja ::'之前,Visual Studio會向我發出錯誤信號。 – simmy

回答

0

enemy.cpp int aP = 0; 您創建了2個具有相同名稱的值:第1個屬於類,第2個是全局值。編譯器無法確定您正在嘗試使用哪一個。