为什么成员函数称为“模棱两可”?

时间:2019-06-09 03:56:02

标签: c++ mutators

为什么我的重载成员函数仅作为字符“模糊”而不是int和字符串?

我试图通过重载的equals()函数将代码集中到我的Char类中,以创建一个代码路径。当我将equals用作int和string,但将其作为char含糊时,它可以正常工作。

class Char
{
private:
    char cData;
    int iData;
    string sData;
public:
    //Mutators:
    void equals(char c);
    void equals(int c);
    void equals(string c);

    //Constructors:
    Char(char c);
    Char(int c);
    Char(string c);
};

void Char::equals(char c)
{
    cData = c;
}

void Char::equals(int c)
{
    iData = c;
}

void Char::equals(string c)
{
    sData = c;
}

Char::Char(char c)
{
    this->equals(c); //Call to member function 'equals' is ambiguous
}

Char::Char(int c)
{
    this->equals(c);
}

Char::Char(string c)
{
    this->equals(c);
}

该错误仅发生在char上,这很混乱,因为string可以正常工作。我希望它能对所有人都起作用,因为到目前为止一直如此。

2 个答案:

答案 0 :(得分:0)

您可以使用单个#?方法来接受equalchar。喜欢

int

答案 1 :(得分:0)

这是模棱两可的,因为如果这样做的话

Char c(42);

编译器不知道应调用char还是int构造函数。两者都是很好的搭配。

equals(123);也是如此。同样,charint重载都匹配,并且编译器无法告诉您要调用哪个。