2014-09-29 63 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(){ 

}; 
相关问题