C++ 已定义错误LNK2005构造函数

C++ 已定义错误LNK2005构造函数,c++,lnk2005,C++,Lnk2005,你好,我的代码有点问题 //俱乐部 #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 { publi

你好,我的代码有点问题

//俱乐部

#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()
    {
    }
//日期: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()
{
}
#pragma一次
#包括
#包括
使用名称空间std;
上课日期
{
公众:
日期(整数j、整数m、整数a);
~Date();
无效词缀();
无效设置(int newj);
void setMois(int newm);
void setAnne(int newa);
int getJour()常量;
int getMois()常量;
int getAnne()常量;
私人:
国际日;
int mois;
内坦尼;
};
日期:日期(整数j、整数m、整数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;
}
#包括“Date.h”
作废日期::afficher(){

cout只需在类中移动定义,使其内联:

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;
};

只需将定义移动到类中,使其内联即可:

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;
};

您应该在date.cpp中定义构造函数。由于您在club.cpp和club.cpp中都包含date.h(您应该这样做),因此它在club.cpp和date.cpp中分别定义了一次。在date.h中只保留构造函数的声明


另一种方法是直接在声明构造函数的位置定义构造函数。这只应针对小成员函数/或构造函数执行,因为它们随后是内联的,这意味着代码会插入到使用它的任何地方,从而使可执行文件变大。

您应该在date.cpp中定义构造函数。因为您包括date。h在club.cpp和club.cpp中(您应该这样做),它在club.cpp和date.cpp中定义了一次。在date.h中只保留构造函数的声明


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

实际上,
日期::日期
构造函数是在
中定义的date.h
,因此将在任何包括
date.h
.cpp
中(重新)定义,在您的情况下(至少)
club.cpp
date.cpp
日期::~date
析构函数也是如此

您可以(a)将
Date::Date
Date:~Date
定义移动到
Date.cpp
,或者(b)在
Date.h
中将它们定义为内联:

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

    Date::~Date()
    {
    }

    //...

实际上,
Date::Date
构造函数是在
Date.h
中定义的,因此将在包括
Date.h
的任何
.cpp
中(至少)定义
club.cpp
Date.cpp
。对于
Date:~~Date
析构函数也是如此

您可以(a)将
Date::Date
Date:~Date
定义移动到
Date.cpp
,或者(b)在
Date.h
中将它们定义为内联:

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

    Date::~Date()
    {
    }

    //...

在头文件中定义一次意味着在包含该头文件的每个文件中定义一次。在头文件中定义一次意味着在包含该头文件的每个文件中定义一次。谢谢,我在我的帖子X)之后很快找到了解决方案,非常感谢,但再次感谢^谢谢,我在帖子之后很快找到了解决方案十) 确实如此,但再次感谢你^^