首页 > 解决方案 > 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;
}

我不断收到这些错误:

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

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

我应该如何重新组织我的代码,使其不再说我有多个定义?

标签: c++constructorheader-filesclion

解决方案


您看到的错误是因为您的.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;
}
*/

推荐阅读