C ++无法在类(和命名空间)中重载函数

时间:2015-04-26 17:30:18

标签: c++ function class compilation namespaces

我刚在命名空间中创建了一个很酷的类,因此我想创建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";
    }
}

感谢您的帮助, 〜马库斯

我发誓,我已经尝试过没有成功的可能性......

2 个答案:

答案 0 :(得分:2)

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

return output(DateTime());

您可以通过将参数设为const参考:

来解决此问题
const string output(const DateTime& time) const;

答案 1 :(得分:0)

你需要

const string output(const DateTime& time) const;

您的通话模式(DateTime())会创建一个临时模式。非const引用不能绑定到临时引用。你需要一个const引用。