2014-09-29 75 views
0

我是C++的新手,我不明白頭,類,對象和繼承是如何工作的。來自類的對象的調用方法從另一個類繼承

所以我在我的代碼有問題。我不能調用我的方法攻擊從類Mage繼承自類Character。

當我嘗試測試出現此錯誤:

CMakeFiles\GUi.dir/objects.a(main.cpp.obj): In function `main': 
C:/Users/Guilherme/Dropbox/Develop/c++/t/main.cpp:8: undefined reference to `Mage::attack()' 

我真的不知道哪裏出了問題。如果有人能幫助我,我會很高興。

這main.cpp中

#include <iostream> 
#include <conio.h> 
#include <string.h> 
#include "chars/Mage.h" 

int main() { 
    Mage myChar; 
    myChar.attack(); 
    return 0; 
} 

Mage.h

class Mage{ 
public: 
    void attack(); 
}; 

Mage.cpp

#include "Character.h" 

class Mage : public Character{ 
public: 
    double maxHP = 20; 
    void attack(){ 

    } 
}; 

Character.h

#define MINIMUM_POINTS 1 
#define STATUS_CHARACTER_DEAD false 
#define STATUS_CHARACTER_LIVED true 
#include <string.h> 

class Character{ 

public: 
    Character(); 

    int level; //current level 

    double maxHP; //Max Life 

    double maxMP; //Max points to use mana 

    double attackPhysical; //Power physical attack 

    double attackMagic; // Points to magic attack 

    double defensePoints; // Point to physical attack defense 

// string name; //Char name 

    bool live; // if person is live or dead 



    void setName(); //Setter Char name 

    void getName(); //Getter char name 

    void attack(); 
}; 

** Character.cpp *

class Character{ 
public: 
    void attack(){ 

    }; 
}; 
+1

不知道如果這是你的問題,但你違反了一個定義規則。您應該將整個類的聲明放在標題中,並且只將這些實現放在源文件中。 – 2014-09-29 00:45:08

+0

我明白這個問題。首先,編譯器不是complite Character.cpp和Mage.cpp。 – 2014-09-29 02:38:22

+0

之後,我只需要調整文件Mage.cpp,Character.cpp來導入文件Mage.h和Character.h。 – 2014-09-29 02:39:10

回答

1

您必須只有一個的 '類法師' 的定義。你有兩個,他們互相矛盾。一個在Mage.h中,另一個在Mage.cpp中。你應該有隻有這樣,中Mage.cpp法師::攻擊的實現:

void Mage::attack(){ 

} 

而且你需要了解任何事情之前的頭文件使用C是如何工作的/ C++。

1

在Mage.cpp:

void Mage::attack(){ 

} 

也Character.cpp:

void Character::attack(){ 

}; 
相關問題