没有重复定义,为什么编译器报错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