gpt4 book ai didi

c++ - 重载类方法的歧义调用

转载 作者:行者123 更新时间:2023-12-02 09:53:01 25 4
gpt4 key购买 nike

我正在为有理数实现一个类。我用参数和所有方法创建了一个构造函数。在没有提供参数的情况下,我也尝试添加默认构造函数。
这些是代码的相关部分:

Rational::Rational(int numer, int denom){ //Constructor
numer = numer;
denom = denom;
}
Rational::Rational(){
int numer = 1;
int denom = 2;
}
#ifndef RATIONAL_H
#define RATIONAL_H

class Rational{
private:
int numer;
int denom;

public:
Rational(int numer=1, int denom=2); // Tried to use this to provide defaults, but still generated errors unless I provided parameters in the Test Driver.
Rational(); // Tried to make a separate default constructor, also causing errors
int getNumer();
int getDenom();
Rational add(Rational b);
Rational sub(Rational b);
Rational mult(Rational b);
Rational divide(Rational b);
void setValues(int numer, int denom);
void print();
void printFloat();
};


#endif

int main(){
Rational r(3,4); // Succesfully creates a fraction 3/4
Rational r1; //causes error
这是尝试创建第二个默认构造函数生成的错误,但我不确定问题是什么:

error: call of overloaded ‘Rational()’ is ambiguous

最佳答案

第一个构造函数中的默认参数已经可以处理没有给出值的情况。您也不应创建默认构造函数。删除它,您的代码将编译。

Rational::Rational(int numer, int denom){
numer = numer;
denom = denom;
}
Rational::Rational(){
int numer = 1;
int denom = 2;
}
class Rational{
Rational(int numer=1, int denom=2);
Rational();
};
另外,您应该使用初始化程序列表来初始化构造函数中的变量,而不是赋值语句:
Rational::Rational(int numer, int denom)
: numer(numer), denom(denom)
{
}
有关详细信息,请参见:
  • Why should I prefer to use member initialization lists?
  • 关于c++ - 重载类方法的歧义调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62747274/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com