1

你好我的代码有一点问题。

//俱乐部.h

#pragma once
#include<iostream>
#include<conio.h>
#include <string>
#include<vector>
#include"Palmares.h"
#include"Stade.h"
#include"Joueur.h"
#include"Date.h"
using namespace std;

class Club
    {
    public:
        Club(int j, int m, int a, int c, string qualite, string n, string addressstade, string nom, string hist, string couleur, string vill, string addressclub);
        ~Club();
        void setNom(string newnom);
        void setHistoire(string newt);
        void setDate(int newj, int newm, int newa);
        void setCouleurClub(string newcouleur);
        void setStade(int newc, string newqualite, string newnom, string newadresse);
        void setVille(string newville);
        void setAddresse(string newadresse);
        string getHistoire()const;
        string getCouleur()const;
        Date getDate()const;
        Stade getStade()const;
        string getVille()const;
        string getAddresse()const;
        vector<Personne*> getTabStaff()const { return tabStaff; };
        vector<Joueur> getTabJoueur()const { return tabJoueur; };
        vector<Palmares> getPalmares()const { return tabPalmares; };

        void addStaff(Personne &newpersonne);
        void addJoueur(Joueur newjoueur);
        void addPalmares(Palmares newpalmares);

    private: 
        string nom_club;
        string histoire;//histoire du club
        string couleur_club;
        Date date;// date de creation
        Stade stade;//stade du club
        string ville; 
        string addresse;
        vector<Personne*> tabStaff;
        vector<Joueur> tabJoueur;//tableau des joueur du club
        vector<Palmares> tabPalmares;//tableau des palmares du club


    };

    //******************************constructeur/destructeur*************************************************
    Club::Club(int j, int m, int a, int c, string qualite, string n, string addressstad, string nom, string hist, string couleur, string vill, string addressclub) 
        : date(j, m, a), stade(c,qualite,n,addressstad)
    {
        nom_club = nom;
        histoire = hist;
        couleur_club = couleur;
        ville = vill;
        addresse = addressclub;
    }

    Club::~Club()
    {
    }

//俱乐部.cpp

#include"Club.h"

//*****************************Setteur/getteur************************************************************
void Club::setNom(string newnom){
    nom_club = newnom;
}
void Club::setHistoire(string newt){
    histoire = newt;
}
void Club::setDate(int newj, int newm, int newa){
    date.setJour(newj);
    date.setMois(newm);
    date.setAnne(newa);
}
void Club::setCouleurClub(string newcouleur){
    couleur_club = newcouleur;
}
void Club::setStade(int newc, string newqualite, string newnom, string newadresse){
    stade.setCapacite(newc);
    stade.setQalitePeouse(newqualite);
    stade.setNom(newnom);
    stade.setAdresse(newadresse);
}
void Club::setVille(string newville){
    ville = newville;
}
void Club::setAddresse(string newadresse){
    addresse = newadresse;
}
string Club::getHistoire()const{
    return histoire;
}
string Club::getCouleur()const{
    return couleur_club;
}
Date Club::getDate()const{
    return date;
}
Stade Club::getStade()const{
    return stade;
}
string Club::getVille()const{
    return ville;
}
string Club::getAddresse()const{
    return addresse;
}

/****************************************fonction d'ajout des joueur, staff et palmares*************************************************/
void Club::addStaff(Personne &newpersonne){
    tabStaff.push_back(&newpersonne);
}
void Club::addJoueur(Joueur newjoueur){
    tabJoueur.push_back(newjoueur);
}
void Club::addPalmares(Palmares newpalmares){
    tabPalmares.push_back(newpalmares);
}

//日期.h

#pragma once
#include<iostream>
#include<conio.h>

using namespace std;


class Date
{
public:
    Date(int j, int m, int a);
    ~Date();
    void afficher();
    void setJour(int newj);
    void setMois(int newm);
    void setAnne(int newa);
    int getJour()const;
    int getMois()const;
    int getAnne()const;
private:
    int jour;
    int mois;
    int annee;
};

Date::Date(int j, int m, int a)
{
    jour = j;
    mois = m;
    annee = a;
}

Date::~Date()
{
}

//日期.cpp

#include"Date.h"

void Date::afficher(){
    cout << jour << '/' << mois << '/' << annee << endl;
}

void Date::setJour(int newj){
    jour = newj;
}
void Date::setMois(int newm){
    mois = newm;
}
void Date::setAnne(int newa){
    annee = newa;
}

int Date::getJour()const{
    return jour;
}
int Date::getMois()const{
    return mois;
}
int Date::getAnne()const{
    return annee;
}

我的问题是 VS throw me this 1>Date.obj : error LNK2005: "public: __thiscall Date::Date(int,int,int)" (??0Date@@QAE@HHH@Z) 已经在 Club 中定义。对象

我知道他的意思,但我只在 date.h 上定义了构造函数,我检查没有其他定义。请帮帮我

4

3 回答 3

2

事实上,Date::Date构造函数被定义date.h并因此将被(重新)定义在任何.cpp包括date.h, 在你的情况下(至少)club.cppdate.cpp. Date::~Date析构函数也是如此。

您可以 (a) 将Date::DateandDate::~Date定义移动到date.cpp,或 (b) 将它们定义为 inline in date.h

class Date
{
public:
    Date::Date(int j, int m, int a)
    {
        jour = j;
        mois = m;
        annee = a;
    }

    Date::~Date()
    {
    }

    //...
于 2016-02-17T19:46:55.730 回答
1

只需在类中移动定义,以便它们被内联:

class Date
{
public:
    Date(int j, int m, int a)
    {
        jour = j;
        mois = m;
        annee = a;
    }
    ~Date()
    {
    }
    void afficher();
    void setJour(int newj);
    void setMois(int newm);
    void setAnne(int newa);
    int getJour()const;
    int getMois()const;
    int getAnne()const;
private:
    int jour;
    int mois;
    int annee;
};
于 2016-02-17T19:45:59.920 回答
1

您应该在 date.cpp 中定义构造函数。由于您在 club.cpp 和 club.cpp 中包含 date.h(正如您应该的那样),它在 club.cpp 中定义一次,在 date.cpp 中定义一次。在 date.h 中只保留构造函数的声明。

另一种方法是直接在声明它的地方定义构造函数。你应该只对小的成员函数/或构造函数这样做,因为它们是内联的,这意味着代码被插入到它使用的任何地方,这使得你的可执行文件更大。

于 2016-02-17T19:46:40.173 回答