C ++标头和cpp文件构造函数多个错误

问题描述

我正在使用Clion在C ++中进行编码。

我正在尝试制作一个Date.cpp文件一个Date.h文件

这是我的代码

#include "Date.h"

// Date constructor
Date::Date(int year,int month,int day)
{
    SetDate(year,month,day);
}

// Date member function
void Date::SetDate(int year,int day)
{
    m_month = month;
    m_day = day;
    m_year = year;
}
class Date
{
private:
    int m_year;
    int m_month;
    int m_day;

public:
    Date(int year,int day);

    void SetDate(int year,int day);

    int getYear() { return m_year; }
    int getMonth() { return m_month; }
    int getDay() { return m_day; }
};

// Date constructor
Date::Date(int year,int day)
{
    m_month = month;
    m_day = day;
    m_year = year;
}

我不断收到这些错误

Date :: Date(int,int,int)的多个定义

Date :: SetDate(int,int,int)的多个定义

我应该如何重组我的代码,使它不再表示我有多个定义?

解决方法

根据您的图片,您确实有多个定义。即如果您在.cpp文件中定义(编写)了函数,那么您也无法在标头中编写该函数。

如果您尝试将实现放在没有.cpp文件的标头中。仅将其保留在.h文件中,并在定义之前添加内联关键字,即:

inline Date::Date(int year,int month,int day) {
}
,

您看到的错误是因为您的.h.cpp文件都定义了相同的Date::Date()Date::SetDate()实现主体。因为它们不属于.h文件,所以将它们从.cpp文件中删除。

通常,.h文件应用于声明内联定义(即,类似于您的get..()方法),而{ {1}}文件应用于非线性定义

Date.h

.cpp

Date.cpp

#ifndef DateH // don't forget a header guard!
#define DateH

class Date
{
private:
    int m_year;
    int m_month;
    int m_day;

public:
    Date(int year,int day);

    void SetDate(int year,int day);

    // these are OK here!
    int getYear() { return m_year; }
    int getMonth() { return m_month; }
    int getDay() { return m_day; }

    // Or,you can move their definitions into the .cpp file,if you want...
    /*
    int getYear();
    int getMonth();
    int getDay();
    */
};

#endif