我在尝试编译一个非常简单的测试c ++代码时遇到了一些问题:
当我想为测试目的定义复制构造函数时,我有一个Warrior类。我在Warrior.h中声明它并在Warrior.cpp中定义它。
在Ubuntu上使用g ++编译代码时效果很好,但是当尝试在Windows7 Codeblocks(mingw)上编译代码时,我收到以下消息:
错误:隐式声明的'Warrior :: Warrior(const Warrior&)'|||的定义===构建失败:1个错误
代码:
Warrior.h
#ifndef WARRIOR_H_INCLUDED
#define WARRIOR_H_INCLUDED
#include <string>
#include "Arme.h"
#include "Warrior.h"
class Warrior{
public:
Warrior(Warrior const& other);
std::string getName() const;
Warrior setName(std::string name);
int getAge() const;
Warrior setAge(int age);
int getLife() const;
Warrior setLife(int life);
Arme getArme() const;
Warrior setArme(Arme& arme);
void attaquer(Warrior& autreCombattant);
bool isAlive() const;
Warrior setIsAlive(bool isAlive);
Warrior(std::string name, int age);
~Warrior();
private:
std::string m_name;
int m_age;
int m_life;
bool m_isAlive;
Arme m_arme;
};
#endif // WARRIOR_H_INCLUDED
Warrior.cpp
#include "Warrior.h"
#include "Arme.h"
#include <iostream>
#include <string>
using namespace std;
Warrior Warrior::setName(string name){
m_name=name;
return *this;
}
string Warrior::getName() const{
return m_name;
}
int Warrior::getAge() const{
return m_age;
}
Warrior Warrior::setAge(int age){
m_age=age;
return *this;
}
int Warrior::getLife() const{
return m_life;
}
Warrior Warrior::setLife(int life){
m_life=life;
if(life<=0){
cout << m_name << " est mort." << endl;
}else{
cout << m_name << " a la vie suivante : " << m_life << endl;
}
return *this;
}
Arme Warrior::getArme() const{
return m_arme;
}
Warrior Warrior::setArme(Arme& arme){
m_arme=arme;
cout << m_name << " a maintenant l'arme suivante : " << arme.getName() << endl;
return *this;
}
void Warrior::attaquer(Warrior& autreCombattant){
autreCombattant.setLife(autreCombattant.getLife() - m_arme.getDegat());
}
bool Warrior::isAlive() const{
return m_isAlive;
}
Warrior Warrior::setIsAlive(bool isAlive){
m_isAlive=isAlive;
return *this;
}
Warrior::Warrior(string name, int age): m_name(name), m_age(age), m_arme("b",4){
m_life=300;
cout << name << " vient de rejoindre l'arene" << endl;
}
Warrior::~Warrior(){}
Warrior::Warrior(Warrior const& autre): m_name(autre.getName())
{}
Arme.h
#ifndef ARME_H_INCLUDED
#define ARME_H_INCLUDED
#include <string>
class Arme{
private:
int m_degat;
std::string m_name;
public:
int getDegat() const;
Arme setDegat(int degat);
std::string getName() const;
Arme setName(std::string name);
Arme(std::string name, int degat);
Arme();
};
#endif // ARME_H_INCLUDED
Arme.cpp
#include "Arme.h"
#include <iostream>
#include <string>
using namespace std;
int Arme::getDegat() const{
return m_degat;
}
Arme Arme::setDegat(int degat){
m_degat=degat;
return *this;
}
string Arme::getName() const{
return m_name;
}
Arme Arme::setName(string name){
m_name=name;
return *this;
}
Arme::Arme(std::string name, int degat): m_name(name), m_degat(degat){
}
Arme::Arme(){
m_name="default weapon";
m_degat=1;
}
感谢您的帮助
答案 0 :(得分:1)
我已经在codeblocks上删除了我的项目,然后创建了一个新的项目,我已经添加了以前创建的文件,现在它编译没有任何问题。
在我看来Codeblocks有一种没有刷新的缓存引擎......很奇怪!