C++ 默认参数不属于同一类型?
我之前发布了一个关于我的构造函数的问题,我以某种方式修复了它。现在,当我试图用userinput声明一个“Rational”类型的对象,而用默认参数声明另一个对象时,我遇到了一个错误。当我尝试使用重载运算符时,它会给我这个错误C++ 默认参数不属于同一类型?,c++,parameters,C++,Parameters,我之前发布了一个关于我的构造函数的问题,我以某种方式修复了它。现在,当我试图用userinput声明一个“Rational”类型的对象,而用默认参数声明另一个对象时,我遇到了一个错误。当我尝试使用重载运算符时,它会给我这个错误 error: no match for 'operator+' (operand types are 'Rational()' and 'Rational') Rational xxx = test6+test5; 我的.H文件 #ifndef RATIONAL_H
error: no match for 'operator+' (operand types are 'Rational()' and 'Rational')
Rational xxx = test6+test5;
我的.H文件
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
#include <stdexcept>
using namespace std;
class Rational {
private:
int num, denom;
public:
/* Set Numerator and Denom */
Rational(int nu, int deno);
int gcd(int x, int y);
Rational operator+(const Rational& other);
Rational operator-(const Rational& other);
Rational operator*(const Rational& other);
Rational operator/(const Rational& other);
friend ostream &operator<<(ostream& os, const Rational& rat);
void deci();
};
#endif
我是否应该创建另一个方法,只声明Rational而不在我的cpp中使用括号
Rational test6();
信不信由你,但它被解析为名为test6
()的函数的声明,该函数返回Rational
的实例
从那一刻起,事情几乎就分崩离析了
将此更改为:
Rational test6;
附言:实际上,您的操作员过载确实有一个小问题。它应该是:
Rational Rational::operator+(const Rational &other)
信不信由你,但它被解析为名为test6
()的函数的声明,该函数返回Rational
的实例
从那一刻起,事情几乎就分崩离析了
将此更改为:
Rational test6;
附言:实际上,您的操作员过载确实有一个小问题。它应该是:
Rational Rational::operator+(const Rational &other)
您的行
rationaltest6()
不是定义一个类型为Rational
的新变量,而是定义一个名为test6
的函数,该函数返回Rational
,不带任何参数。要获得您想要的行为,请删除括号:rationaltest6代码>
或者,如果您使用的是C++11,我相信您可以使用大括号:RationalTest6{}代码>您的代码行RationalTest6()
不是定义一个类型为Rational
的新变量,而是定义一个名为test6
的函数,该函数返回Rational
,不带任何参数。要获得您想要的行为,请删除括号:rationaltest6代码>
或者,如果您使用的是C++11,我相信您可以使用大括号:RationalTest6{}代码>更新后:
您已经告诉我们您的默认参数是1/1,但您也必须告诉编译器
您需要在现有构造函数上设置默认值,或者提供默认构造函数。更新后:
您已经告诉我们您的默认参数是1/1,但您也必须告诉编译器
您需要将默认值放在现有构造函数上,或者提供一个默认构造函数。Rational::Rational(int nu=1,int deno=1){…}这不声明默认参数吗?不。调用该方法的代码无法看到它们,它们位于不同的翻译单元中。将它们放在类定义的声明中。是的,看起来我必须声明一个默认参数。。。我是通过调用另一个没有参数的构造函数方法来实现的,有没有办法把它放在我的构造函数中?Rational(int nu=1,int deno=1)代码>在类声明中。否。在你的类中,你有Rational(intnu,intdeno)代码>。这是构造函数的声明。将其更改为Rational(int nu=1,int deno=1)代码>。然后,当您在没有任何参数(或没有deno
)的情况下调用它时,调用者将使用这些值(或该值)。(我回复的评论被删除了吗?)Rational::Rational(int nu=1,int deno=1){…}这没有声明默认参数吗?没有。调用该方法的代码无法看到它们,它们位于不同的翻译单元中。将它们放在类定义的声明中。是的,看起来我必须声明一个默认参数。。。我是通过调用另一个没有参数的构造函数方法来实现的,有没有办法把它放在我的构造函数中?Rational(int nu=1,int deno=1)代码>在类声明中。否。在你的类中,你有Rational(intnu,intdeno)代码>。这是构造函数的声明。将其更改为Rational(int nu=1,int deno=1)代码>。然后,当您在没有任何参数(或没有deno
)的情况下调用它时,调用者将使用这些值(或该值)。(我回复的评论被删除了吗?@BaoThai你没有给Rational
一个默认构造函数。要么这样做,要么使用rationaltest6(1,1)代码>用于example@BaoThai您没有给Rational
一个默认构造函数。要么这样做,要么使用rationaltest6(1,1)代码>例如
Rational Rational::operator+(const Rational &other)