调用函数时已定义不能运行

我在源.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);

构造函数是在实例化的时候自动调用的

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7514409
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:cpp语法及常用函数整理
  • 除此之外, 这篇博客: C++ 在一个cpp文件中 使用另一个cpp文件中定义的函数中的 第三步: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在使用该函数的.cpp中
    #include"myFunctions.h"
    然后就可以使用fuction(a)函数了

  • 以下回答由chatgpt基于相关博客总结生成:

    回答:根据参考资料中的段落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()函数涉及到类的实例化,也需要在声明时进行相应的类的前向声明或引入相应的头文件。