没有重复定义,为什么编译器报错error LNK2005?

error LNK2005: xxx已经在xxx.obj中定义

网上搜说是重复定义了全局变量or函数,可是我代码里面好像没有呀

程序是日期计算器 还没有完善

感觉.h和.cpp没有重复定义 很疑惑

类定义内的不是定义是声明吧?为什么也会报错?

谢谢图片说明

Date.h

//日期类定义

#ifndef DATE_H

#define DATE_H

class Date

{

private:

int year;

int month;

int day;

void plusOne();//加一天

int daysInThisMonth();//本月日期

bool isLeap();//判断是否闰年

bool operator>(Date d);//判断日期先后:定义较晚的日期>较早的日期

bool operator==(Date d);//判断两日期是否相等

int getYear() {return year;}

int getMonth() {return month;}

int getDay() {return day;}

public:

Date(int y, int m, int d);//构造函数

void displayCalendar();//显示当前月历

int daysFromNow();//计算距当前日期

int daysFromOneDay(Date d);//计算距某日日期

void displayYearlyCalendar();//显示当年年历

};

#endif

Date.cpp

//日期类实现

#include<ctime>

#include<iostream>

#include<iomanip>

#include"Date.h"

using namespace std;

//构造函数

Date::Date(int y, int m, int d)

{

if(y>0)

year=y;

else

{

year=2020;

cout<<"错误年份。已设置为2020。"<<endl;

}

if(m>=1&&m<=12)

month=m;

else

{

month=1;

cout<<"错误月份。已设置为1。"<<endl;

}

if(d>=1&&d<=daysInThisMonth())

day=d;

else

{

day=1;

cout<<"错误日期。已设置为1。"<<endl;

}

}

//判断两日期是否相等

bool Date::operator==(Date d)

{

if(this->getDay()==d.getDay()

&&this->getMonth()==d.getMonth()

&&this->getYear()==d.getYear())

return true;

else return false;

}

//判断日期先后:定义较晚的日期>较早的日期

bool Date::operator>(Date d)

{

if(getYear()>d.getYear())

return true;

else if(getYear()!=d.getYear())

return false;

else if(getMonth()>d.getMonth())//同年

return true;

else if(getMonth()!=d.getMonth())

return false;

else if(getDay()>d.getDay())//同月

return true;

else return false;

}

//本月日期

int Date::daysInThisMonth()

{

switch(getMonth())

{

case 4:

case 6:

case 9:

case 11:

return 30;

case 2:

if(isLeap())//二月考虑闰年

return 29;

else return 28;

default:

return 31;

}

}

//判断是否闰年

bool Date::isLeap()

{

int y=getYear();

if(y % 4 != 0)//不可以被4整除:平年(如2019)

return false;

else if(y % 100 != 0)//可以被4整除不可以被100整除:闰年(如2020)

return true;

else if(y % 400 != 0)//可以被4和100整除但不能被400整除:平年(如2100)

return false;

else return true;//可以被4、100和400整除:闰年(如2000)

}

//加一天

void Date::plusOne()

{

if(getDay()!=daysInThisMonth())//不是当月最后一天

day++;

else if(getMonth()!=12)//是当月最后一天且月份不是12月:日期归一,月份增一

{

month++;

day=1;

}

else//是12月31日:日期、月份归一,年份加一

{

year++;

month=1;

day=1;

}

}

//计算距某日日期

int Date::daysFromOneDay(Date d)

{

int dif;

if((*this)==d) return 0;//同天

if((*this)>d)//在后

{

for(dif=0;!((*this)==d);dif++)

d.plusOne();

return dif;

}

else//在前

{

//Date dd(this->getYear(),this->getMonth(),this->getDay());

Date dd((*this));

for(dif=0;!(dd==d);dif++)

dd.plusOne();

return -dif;

}

}

//计算距当前日期

int Date::daysFromNow()

{

time_t now=time(0);

tm* ltm=localtime(&now);

int y=1900+ltm->tm_year;

int m=1+ltm->tm_mon;

int d=ltm->tm_mday;

Date today(y,m,d);

return daysFromOneDay(today);

}

//显示当前月历

void Date::displayCalendar()

{

Date std(2020,1,1);

int week=3;

if((*this)>std)

{

int dif=this->daysFromOneDay(std);

for(int i=0;i<dif;i++)

{

if(week<7)

week++;

else week=1;

}

}

else

{

int dif=this->daysFromOneDay(std);

for(int i=0;i>dif;i--)

{

if(week>1)

week--;

else week=7;

}

}

cout<<getYear()<<"年"<<getMonth()<<"月"<<endl;

cout<<"日 一 二 三 四 五 六"<<endl;

int space;

if(week==7)

space=0;

else space=4*week;

for(int i=0;i<space;i++)

cout<<" ";

for(int i=getDay();i<=daysInThisMonth();i++)

{

cout<<setw(2)<<i;

if(week==6)

{

cout<<endl;

week++;

}

else if(week==7)

week=1;

else week++;

}

}

//显示当年年历

void Date::displayYearlyCalendar()

{

}

主函数.cpp

#include<iostream>

#include<cstdlib>

#include"Date.cpp"

using namespace std;

int main()

{

cout<<"欢迎使用日期计算器。"<<endl<<endl;

cout<<"输入数字完成相应功能:"<<endl;

cout<<"1.显示日历"<<endl;

cout<<"2.计算今日与某日间距"<<endl;

cout<<"3.计算任意两日期间距"<<endl;

cout<<"4.生成年历并保存"<<endl<<endl;

cout<<"输入0可退出"<<endl;

int flag;

cin>>flag;

while (flag)

{

switch (flag)

{

case 1:

{

system("cls");

cout << "请以格式“年 月 日”输入日期,中间以空格隔开:" << endl;

int y, m, d;

cin >> y >> m >> d;

Date day(y, m, d);

day.displayCalendar();

break;

}

case 2:

{

system("cls");

cout << "请以格式“年 月 日”输入日期,中间以空格隔开:" << endl;

int y, m, d;

cin >> y >> m >> d;

Date day(y, m, d);

cout << "今日距该日" << day.daysFromNow() << "日" << endl;

cout << "(该日晚于今日则为正,该日早于今日则为负)" << endl;

break;

}

case 3:

{

system("cls");

cout << "请以格式“年 月 日”输入日期1,中间以空格隔开:" << endl;

int y1, m1, d1;

cin >> y1 >> m1 >> d1;

Date day1(y1, m1, d1);

cout << "请以格式“年 月 日”输入日期2,中间以空格隔开:" << endl;

int y2, m2, d2;

cin >> y2 >> m2 >> d2;

Date day2(y2, m2, d2);

cout << "日期2距日期1" << day2.daysFromOneDay(day1) << "日" << endl;

cout << "(日2晚于日1则为正,日2早于日1则为负)" << endl;

break;

}

case 4:

{

system("cls");

cout << "请以格式“年 月 日”输入日期,中间以空格隔开:" << endl;

int y, m, d;

cin >> y >> m >> d;

Date day(y, m, d);

day.displayYearlyCalendar();

cout << "年历已保存。" << endl;

break;

}

default:

break;

}

if (flag!=1&&flag!=2&&flag!=3&&flag!=4)

break;

cout << "输入数字完成相应功能:" << endl;

cout << "1.显示日历" << endl;

cout << "2.计算今日与某日间距" << endl;

cout << "3.计算任意两日期间距" << endl;

cout << "4.生成年历并保存" << endl << endl;

cout << "输入0可退出" << endl;

cin >> flag;

}

cout << "\n感谢使用。\n" << endl;

return 0;

}

回答

主程序

#include"Date.cpp"

->

#include"Date.h"

以上是 没有重复定义,为什么编译器报错error LNK2005? 的全部内容, 来源链接: utcz.com/a/41791.html

回到顶部