C+中的多定义错误+;与链接错误相关 < >我在C++中定义了一个简单的类,叫做“代码>日期。我使用的IDE是Qt Creator。当我编译时,编译器说这个类中的每个函数都有“多个定义”。下面是.cpp和.h文件: // date.h #ifndef DATE_H #define DATE_H #include <string> /* A class representing an earth day.*/ class Date { public: /*construct a new day, initially assigned at Jan.1st.2000*/ Date(); /* take three numbers to create the date.*/ Date(int cmonth,int cday, int cyear); /*clean up memory allocated to this data type*/ ~Date(); private: int year; int month; int day; }; #endif // DATE_H

C+中的多定义错误+;与链接错误相关 < >我在C++中定义了一个简单的类,叫做“代码>日期。我使用的IDE是Qt Creator。当我编译时,编译器说这个类中的每个函数都有“多个定义”。下面是.cpp和.h文件: // date.h #ifndef DATE_H #define DATE_H #include <string> /* A class representing an earth day.*/ class Date { public: /*construct a new day, initially assigned at Jan.1st.2000*/ Date(); /* take three numbers to create the date.*/ Date(int cmonth,int cday, int cyear); /*clean up memory allocated to this data type*/ ~Date(); private: int year; int month; int day; }; #endif // DATE_H,c++,qt,class,C++,Qt,Class,示例错误消息: D:samplepath\date.cpp:3:错误:“日期::日期()”的多个定义 一个可能导致错误的主要cpp(基本上是任何错误): 第二行代码“date.cpp”实际上是由Qt Creator自动添加到这里的,如果您通过其菜单创建新类 非常感谢这里所有的人对你的慷慨帮助 您确定这是编译器错误而不是链接器错误吗?可能您已经包含了两次对象文件(在.pro文件中)。另外,尝试在构造函数声明中放入默认值,而不是重载它: Date(int cmonth=2000,int cday=1

示例错误消息: D:samplepath\date.cpp:3:错误:“日期::日期()”的多个定义

一个可能导致错误的主要cpp(基本上是任何错误):

第二行代码“date.cpp”实际上是由Qt Creator自动添加到这里的,如果您通过其菜单创建新类


非常感谢这里所有的人对你的慷慨帮助

您确定这是编译器错误而不是链接器错误吗?可能您已经包含了两次对象文件(在.pro文件中)。另外,尝试在构造函数声明中放入默认值,而不是重载它:

Date(int cmonth=2000,int cday=1, int cyear=1);

我用这个qmake
.pro
文件构建了您的代码,它以预期的输出(
0
)构建和执行:


如果没有要销毁的内容,则需要定义析构函数。这是唯一的日期类吗?试着把你的类放在命名空间中。有没有具有相同类的库?@tilart你是说我不需要析构函数?是的,这是唯一的日期类。我通过全球搜索证实了这一点。您的意思是在标题中的每个函数类型之前添加std::吗?@hyde问题根据您的要求进行编辑。不,我没有包括任何.cpp文件。如果不会给您带来太多麻烦的话,您能告诉我如何检查链接吗?我试图在互联网上查找它,但它很混乱。如果在.pro中包含两次,标题保护(#ifndef DATE_H,#define DATE_H…)将保护该文件,假设OP的源代码中不包含实现文件。@MrUser您应该避免使用默认值,因为使用继承时会出现问题。最好使用参数列表<代码>日期():年(2000)、月(1)、日(1){}感谢您的风格建议。但是没有,我没有在.pro文件中包含标题。很抱歉,我跳到了结论。事实上,你一直都是对的。由于更改是自动进行的,我只是没有将.pro文件检查得足够近。我将更改.pro文件,稍后再与您联系。是的,当我将.pro文件更改为这种方式时。它确实奏效了。那么我的.pro肯定出了问题。有什么建议吗?@Wayne我建议你编辑这个问题,现在你知道实际问题是什么了。非常感谢。非常感谢。我终于可以把四肢从脸上移开了。
#include <iostream>

using namespace std;

int main() {
    int sum=0;
    cout << sum << endl;
    return 0;
}
SOURCES += $$files($$PWD/*.cpp) \
        date.cpp
Date(int cmonth=2000,int cday=1, int cyear=1);
TEMPLATE = app
CONFIG += console
CONFIG -= qt

SOURCES += main.cpp \
    date.cpp

HEADERS += \
    date.h