我在源.cpp里定义了一个构造函数然后我想在源2.cpp的中的文件里用源.cpp的函数
#include<iostream>
#include<string>
using namespace std;
class MyDate {
public:
int year;
string month;
int day;
public:
MyDate() {
int year;
string month;
int day;
};
void SetDate() {
cin >> year;
cin >> month;
cin >> day;
};
int Getyear() { return year; }
string Getmon() { return month; }
int Getmonth() {
int mon = 0;
string x[12] = { "JAN" , "FEB" , "MAR","APR" ,"MAY" ,"JUN" ,"JUL","AUG","SEP","OCT","NOV","DEC" };
for (int i = 0; i < 12; i++) {
if (month == x[i]) {
mon = i + 1;
break;
}
}
return mon;
}
int Getday() { return day; }
void equal(const MyDate& C) {
year = C.year;
month = C.month;
day = C.day;
}
void AddDate() {
day++;
int mon = 0;
string x[12] = { "JAN" , "FEB" , "MAR","APR" ,"MAY" ,"JUN" ,"JUL","AUG","SEP","OCT","NOV","DEC" };
for (int i = 0; i < 12; i++) {
if (month == x[i]) {
mon = i + 1;
break;
}
}
if ((mon < 8) && (mon % 2 != 0) && (day == 32)) {
day = 1;
mon++;
}
if ((mon < 8) && (mon % 2 == 0) && (mon != 2) && (day == 31)) {
day = 1;
mon++;
}
if ((mon >= 8) && (mon % 2 == 0) && (day == 32)) {
day = 1;
mon++;
}
if ((mon >= 8) && (mon % 2 != 0) && (day == 31)) {
day = 1;
mon++;
}
if ((mon == 2) && (day == 29)) {
day = 1;
mon++;
}
if (mon == 13) {
year++;
mon = 1;
}
int a = mon - 1;
string M[12] = { "JAN" , "FEB" , "MAR","APR" ,"MAY" ,"JUN" ,"JUL","AUG","SEP","OCT","NOV","DEC" };
month = M[a];
cout << day << "-" << month << "-" << year;
};
void Subtract() {
int mon = 0;
string x[12] = { "JAN" , "FEB" , "MAR","APR" ,"MAY" ,"JUN" ,"JUL","AUG","SEP","OCT","NOV","DEC" };
for (int i = 0; i < 12; i++) {
if (month == x[i]) {
mon = i + 1;
break;
}
}
day--;
if (((7 >= mon >= 4) || (mon == 2)) && (mon % 2 != 0) && (day == 0)) {
day = 30;
mon--;
}
if ((7 >= mon >= 2) && (mon % 2 == 0) && (day == 0)) {
day = 31;
mon--;
}
if ((12 >= mon >= 9) && (mon % 2 != 0) && (day == 0)) {
day = 31;
mon--;
}
if ((12 >= mon >= 9) && (mon % 2 == 0) && (day == 0)) {
day = 30;
mon--;
}
if ((mon == 8) && (day == 0)) {
day = 31;
mon--;
}
if ((mon == 3) && (day == 0)) {
day = 28;
mon--;
}
if ((mon == 1) && (day == 0)) {
year--;
day = 31;
mon = 12;
}
int a = mon - 1;
month = x[a];
cout << day << "-" << month << "-" << year;
};
};
void comparator(MyDate date1, MyDate date2)
{
for (int i = 0; i < 3; i++) {
if ((i == 0) && (date1.Getyear() > date2.Getyear())) {
cout << "First Date > Second Date";
break;
}
if ((i == 0) && (date1.Getyear() < date2.Getyear())) {
cout << "First Date < Second Date";
break;
}
if ((i == 1) && (date1.Getmonth() > date2.Getmonth())) {
cout << "First Date > Second Date";
break;
}
if ((i == 1) && (date1.Getmonth() < date2.Getmonth())) {
cout << "First Date < Second Date";
break;
}
if ((i == 2) && (date1.Getday() > date2.Getday())) {
cout << "First Date > Second Date";
break;
}
if ((i == 2) && (date1.Getday() < date2.Getday())) {
cout << "First Date < Second Date";
break;
}
if ((i == 2) && (date1.Getday() == date2.Getday())) {
cout << "First Date == Second Date";
break;
}
}
}
但是运行是一只提醒我void comparator(MyDate date1, MyDate date2)已定义
```c++
#include"源.cpp"
int main() {
MyDate date1;
MyDate date2;
cout << "Set the first date" << endl;;
date1.SetDate();
date1.AddDate();
cout << endl;
cout << date1.Getyear() << endl;
cout << date1.Getmon() << endl;
cout << date1.Getday() << endl;
date2.equal(date1);
date2.Subtract();
cout << endl;
cout << date2.Getyear() << endl;
cout << date2.Getmon() << endl;
cout << date2.Getday() << endl;
comparator(date1, date2);
/*cout << endl;
SubDate day1(date1);
cout << day1.showdate() << endl;
cout << day1.showtime() << endl;
cout << subtractor(date1, date2);*/
}
```
两个改法:
第一种 源.cpp文件名修改为源.h
#include"源.h"
第二种 不要include "源.cpp"
而是在源1里面加上 extern void comparator(MyDate date1, MyDate date2);
构造函数是在实例化的时候自动调用的
在使用该函数的.cpp中
#include"myFunctions.h"
然后就可以使用fuction(a)函数了
回答:根据参考资料中的段落1和段落2,如果是在不同的.cpp文件中使用同一个构造函数,需要在第二个.cpp文件中进行函数的声明。具体步骤如下:
1.在源.cpp中定义构造函数(假设为Foo())并实现其功能。
2.在源.cpp中编写main函数并调用Foo()函数。
3.在源2.cpp中进行函数的声明,声明Foo()函数的名称和参数列表,并不需要实现其功能。如下:
#include <iostream>
using namespace std;
void Foo(); // 声明 Foo() 函数
int main() {
// 调用 Foo 函数
Foo();
return 0;
}
4.在该声明后,即可使用Foo()函数。
注意:在声明时,需要注意函数名称和参数列表的一致性,否则会出现编译错误。另外,如果Foo()函数涉及到类的实例化,也需要在声明时进行相应的类的前向声明或引入相应的头文件。