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 month, 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 month, int day);
void SetDate(int year, int month, int day);
int getYear() { return m_year; }
int getMonth() { return m_month; }
int getDay() { return m_day; }
};
// Date constructor
Date::Date(int year, int month, int day)
{
SetDate(year, month, day);
}
// Date member function
void Date::SetDate(int year, int month, int day)
{
m_month = month;
m_day = day;
m_year = year;
}

我不断收到这些错误:

日期的多重定义::D ate(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..()方法),而.cpp文件应用于非行定义

日期.h

#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 month, int day);
void SetDate(int year, int month, 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

日期.cpp

#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 month, int day)
{
m_month = month;
m_day = day;
m_year = year;
}
// If you choose to move their definitions here...
/*
int Date::getYear()
{
return m_year;
}
int Date::getMonth()
{
return m_month;
}
int Date::getDay()
{
return m_day;
}
*/

相关内容

  • 没有找到相关文章

最新更新