2017-06-01 90 views
1

我是C++的新手,我必须创建一个简单的视频游戏,它有一个敌人级别,当我尝试从主.cpp,创建enemy.h和enemy.cpp,我按照我在互联网上看到的所有指示,但它不断向我显示错误信息,我希望你们能帮助我。我需要帮助分离C++ LNK2005和LNK1169中的类代码

enemy.cpp文件

#include "enemy.h" 

enemy::enemy(int _hp, int _attackValue, string _name) { 
    hp = _hp; 
    attackValue = _attackValue; 
    name = _name; 
} 

void enemy::attack(enemy agressor, enemy objective) { 
    objective.set_hp(objective.hp - agressor.attackValue); 
    objective.showinfo(objective, 2); 
} 

void enemy::showinfo(enemy enemy, int hero) { 
    if (hero == 1) { 
     cout << "  \n\n\n\n\n\n\n"; 
     cout << enemy.name; 
     cout << "  \n\n\n\n\n\n\n\n"; 
     for (int i = enemy.hp/5; i > 0; i--) { 
      cout << "|"; 
     } 
     cout << "  \n\n\n\n\n\n\n\n\n"; 
     cout << enemy.hp; 
    } 
    else { 
     cout << "         \n\n\n\n\n\n\n"; 
     cout << enemy.name; 
     cout << "         \n\n\n\n\n\n\n\n"; 
     for (int i = enemy.hp/5; i > 0; i--) { 
      cout << "|"; 
     } 
     cout << "         \n\n\n\n\n\n\n\n\n"; 
     cout << enemy.hp; 
    } 
} 

int enemy::get_hp() { 
    return hp; 
} 

void enemy::set_hp(int _hp) { 
    hp = _hp; 
} 

int enemy::get_attackValue() { 
    return attackValue; 
} 

string enemy::get_name() { 
    return name; 
} 

enemy.h文件

#pragma once 

#ifndef enemy_H 
#define enemy_H 

class enemy { 

private: 

    int hp, attackValue; 
    string name; 
public: 
    enemy(); 
    enemy(int, int, string); 
    void attack(enemy, enemy); 
    void showinfo(enemy, int); 
    int get_hp(); 
    void set_hp(int hp); 
    int get_attackValue(); 
    string get_name(); 
}; 

#endif // !enemy_H 

PD:我还是不知道如何实现setcursorposition在C++中,你可以看到。

回答

0

您已声明enemy()但尚未定义它。如果你声明了默认的构造函数,确保你定义它(可能在你的.cpp文件中)

0

error that you get表示你违反了ODR (one definition rule)。换句话说,当你试图将你的enemy类从你的主体中分离出来时,你并没有将所有部分从那里远程传递,而是以多个cpp文件中的相同代码结束。作为一个侧面说明,看起来你忘了定义你的enemy :: enemy()构造函数,或忘记将它从main.cpp移动到enemy.cpp?