g ++汇编了mingw投诉

时间:2014-10-01 06:21:49

标签: c++ g++ mingw

我在尝试编译一个非常简单的测试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;
    }

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我已经在codeblocks上删除了我的项目,然后创建了一个新的项目,我已经添加了以前创建的文件,现在它编译没有任何问题。

在我看来Codeblocks有一种没有刷新的缓存引擎......很奇怪!