C++ 错误 2084:"already has body"
C++ Error 2084: "already has body"
我不太清楚为什么会出现这个错误。也许我只是失明,或者错误可能来自其他来源。这是我得到的错误(我是德语的sry-its)
Fehler 1错误C2084:Funktion"void Enemy::loseHp(int)"hat bereits einen Funktionsrumpf h:\oop\oop\Enemy.cpp 73
这是我的头文件:
#ifndef ENEMY_H
#define ENEMY_H
class Enemy
{
private:
int atk; // Angriffsattribut
int def; // Verteidigungsattribut
int hp; // Lebensattribut
public:
Enemy(void); // Konstruktor
Enemy(int, int, int);// Konstruktor mit eigenen Werten
~Enemy(void); // Destruktor
// get/set Methoden
int getAtk(); // Liefert Angriffwert zurück
void setAtk(int); // Legt einen Angriffswert fest
int getDef(); // Liefert Verteidigungswert zurück
void setDef(int); // Legt einen Verteidigungswert fest
int getHp(); // Liefert Lebenswert zurück
void setHp(int); // Legt einen Lebenswert fest
//------------------------------------------------------
void init(int, int, int);
void Attack(Enemy*); // Methode, welche einen Angriff simuliert
void loseHp(int); // Methode, welche das Verlieren von Leben simuliert
};
#endif
这是.cpp文件
#include "Enemy.h"
#include <iostream>
Enemy::Enemy(void) : atk(0), def(0), hp(0)
{
std::cout << typeid(this).name() << " wurde instanziert.n";
}
Enemy::Enemy(int atk, int def, int hp)
{
this->atk = atk;
this->def = def;
this->hp = hp;
std::cout << typeid(this).name() << " wurde instanziert.n";
}
Enemy::~Enemy(void)
{
}
#pragma region Getter&Setter
int Enemy::getAtk()
{
return this->atk;
}
void Enemy::setAtk(int value)
{
this->atk = value;
}
void Enemy::loseHp(int value)
{
this->setHp(this->getHp() - value);
}
int Enemy::getDef()
{
return this->def;
}
void Enemy::setDef(int value)
{
this->def = value;
}
int Enemy::getHp()
{
return this->hp;
}
void Enemy::setHp(int value)
{
this->hp = value;
}
#pragma endregion
void Enemy::loseHp(int value)
{
int currHp;
currHp = this->getHp();
currHp -= value;
this->setHp(value);
std::cout << typeid(this).name() << " hat " << value << "Leben verloren!n";
}
void Enemy::Attack(Enemy* enemy)
{
int tmpAtk = this->getAtk();
int enemyDefense = enemy->getDef();
int totalAtk = tmpAtk - enemyDefense;
if(totalAtk > 0) {
std::cout << typeid(this).name() << " hat " << typeid(enemy).name() << " angegriffen und " << totalAtk << " Schaden hinzugefügt!n";
enemy->loseHp(totalAtk);
}
else if (totalAtk <= 0){return;}
}
void Enemy::init(int atk, int def, int hp)
{
this->setAtk(atk);
this->setDef(def);
this->setHp(hp);
}
最后是我的主要功能
#include <iostream>
#include "Enemy.h"
using namespace std;
int main(){
Enemy Drache;
Enemy Greif;
Drache.init(100,25,200);
Greif.init(250,10,100);
Greif.Attack(&Drache);
cin.get();
return 0;
}
在.cpp文件中,Enemy::loseHp(int)
以两种不同的方式定义:
void Enemy::loseHp(int value) { this->setHp(this->getHp() - value); } ... void Enemy::loseHp(int value) { int currHp; currHp = this->getHp(); currHp -= value; this->setHp(value); std::cout << typeid(this).name() << " hat " << value << "Leben verloren!n"; }
只提供一个定义。
相关文章:
- 使用"std::enable_if_t" "function template has already been defined"
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?
- 使用 gtest 时"_main already defined"
- "Body requirements not met"将 req 传递给 c++ 中的方法(Boost Beast 库)
- AMQP-CPP RabbitMQ 接收额外的符号 message.body() 比 message.size() 大
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 运行"OpenPose C++ API Tutorial - Example 3 - Body from image"失败
- "Function template has already been defined"与相互排斥的"enable_if"一起
- C++提升async_accept异常"already open"
- 是什么导致了代码中出现"error LNK2005: already defined in .obj"错误?
- 在VS 2015中使用Microchip的mpusbapi.h会产生"LNK2005 Already defined"错误
- TBB parallel_for:为什么 Body::operator() 参数不是常量
- "Destructor already defined"专用析构函数
- 由 Boost 单元测试框架 dll 导出的 std::basic_ostringstream 会导致"already defined symbol"错误
- "Error: expected a '{' introducing a lambda body"尝试从地图<字符,字符中获取字符时> C++
- VS 链接器失败,标准::字符串方法出现"object already exists"错误
- 在 Asio 中建立新连接时出现"Already Open"错误
- C++ 错误 2084:"already has body"
- 错误 C2084 "already has body"应该编译?