【问题标题】:Why is member function call "ambiguous"?为什么成员函数调用“模棱两可”?
【发布时间】:2019-06-09 03:56:02
【问题描述】:

为什么我的重载成员函数只是“模糊”为 char 而不是 int 和 string?

我正在尝试通过重载的 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 可以正常工作。我希望它适用于所有人,因为到目前为止情况就是如此。

【问题讨论】:

  • 我应该减少提供的代码吗?
  • 您应该发布可用于重现错误的最少代码量。
  • 他们说的是你需要提供更多的代码。就像...您能否为我们提供足够的代码以使我们可以得到与您看到的相同的编译错误?这将帮助我们找出问题
  • 您的代码在 GCC 和 Clang 中都能正常编译。你用的是什么编译器,什么版本?

标签: c++ mutators


【解决方案1】:

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

Char c(42);

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

equals(123); 也是如此。同样,charint 重载都匹配,编译器无法判断您打算调用哪一个。

【讨论】:

    【解决方案2】:

    您可以使用单个equal 方法来接受charint。喜欢

    void euqals(unsigned int c_i);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 2011-08-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      相关资源
      最近更新 更多