为什么我在 C++ 中遇到重新定义错误?

kat*_*245 1 c++ constructor class declaration c++11

我编写了一个Fraction类来处理Fraction对象和重载等,我需要将实现与方法的定义分开,但是当涉及到类的构造函数时,我收到了重新定义错误Fraction

来自Fraction.h 的代码片段

class Fraction
{
private:
   int calcGCD(int n1, int n2) const;
   int compare(const Fraction& fraction) const;
   int m_numerator;
   int m_denominator;
public:
   Fraction(int numerator = 0, int denominator = 1) : m_numerator(numerator), m_denominator(denominator);
   Fraction(const Fraction& fraction) : m_numerator(fraction.numerator()), m_denominator(fraction.denominator());
   Fraction(const Fraction& orig);
};
Run Code Online (Sandbox Code Playgroud)

来自Fraction.cpp 的代码片段

#include "Fraction.h"

Fraction::Fraction(int numerator, int denominator) 
   : m_numerator(numerator), m_denominator(denominator)
{}

Fraction::Fraction(const Fraction& fraction)
   : m_numerator(fraction.numerator()), m_denominator(fraction.denominator())
{}
Run Code Online (Sandbox Code Playgroud)

这导致以下错误:

Fraction.h:26:5: error: 'Fraction::Fraction(const Fraction&)' cannot be overloaded with 'Fraction::Fraction(const Fraction&)'
Fraction.h:25:5: note: previous declaration 'Fraction::Fraction(const Fraction&)'
Fraction.h:24:105: error: expected '{' at end of input
Run Code Online (Sandbox Code Playgroud)

其次是其他一些我认为只是一两个主要错误的级联效应。但如果真的需要,我可以发布它们。

我认为这与我在.cpp文件中声明构造函数的方式有关,因为我知道有些东西不会保留,例如访问修饰符static等等。

对不起,如果这是一个愚蠢的错误,我是 C++ 的新手,我在任何地方都找不到答案。

JeJ*_*eJo 5

您已经声明了两次复制构造函数

Fraction(const Fraction& fraction) ....
Fraction(const Fraction& orig);
Run Code Online (Sandbox Code Playgroud)

看签名。它们是相同的,这在 C++ 中是不可能的。

您可能是指在Fraction.h 中

Fraction(const Fraction &fraction); // only one
Run Code Online (Sandbox Code Playgroud)

并在Fraction.cpp 中

Fraction::Fraction(const Fraction& fraction)
   : m_numerator(fraction.numerator())
   , m_denominator(fraction.denominator())
{}
Run Code Online (Sandbox Code Playgroud)

简而言之,您需要删除其中之一。