问题描述
我正在使用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