【问题标题】:C++ Unable to overload function in class (and namespace) [duplicate]C ++无法重载类(和命名空间)中的函数[重复]
【发布时间】:2015-07-05 00:49:51
【问题描述】:

我刚刚在命名空间中创建了一个很酷的类,因此我想创建 2 个函数。它们应该具有相同的名称,但参数不同。

但每次我编译它时,它都会说:

.....formatter.cpp:25:18: error: no matching member function for call to 'output'
return this->output(DateTime());
       ~~~~~~^~~~~~
.....formatter.h:57:18: note: candidate function not viable: expects an l-value for 1st argument
    const string output(DateTime& time) const;
                 ^
.....formatter.cpp:23:25: note: candidate function not viable: requires 0 arguments, but 1 was provided
const string Formatter::output() const
                        ^

所以我假设我做了错字什么的,但没有成功。正因为如此,我最终来到了这里。这是最小化的类:

formatter.h

namespace test {
    class Formatter
    {
    public:
        const string output() const;
        const string output(DateTime& time) const; //DateTime is another class in the same namespace
    }
}

formatter.cpp

namespace test {
    const string Formatter::output() const
    {
        return output(DateTime());
    }

    const string Formatter::output(class DateTime& time) const
    {
        return "Test";
    }
}

感谢您的帮助, ~ 马库斯

我发誓,我尝试过任何可能都没有成功...

【问题讨论】:

    标签: c++ function class compilation namespaces


    【解决方案1】:

    你需要

    const string output(const DateTime& time) const;
    

    您的调用模式 (DateTime()) 会创建一个临时的。非常量引用不能绑定到临时对象。你需要一个 const 引用。

    【讨论】:

      【解决方案2】:

      C++ 不允许将临时变量(右值)绑定到非 const 左值引用,这就是您在这里所做的:

      return output(DateTime());
      

      您可以通过将参数设为const 引用来解决此问题:

      const string output(const DateTime& time) const;
      

      【讨论】:

      • 谢谢^^ 没想到
      猜你喜欢
      • 2017-03-19
      • 2020-12-18
      • 1970-01-01
      • 2015-10-19
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      相关资源
      最近更新 更多