C++ 无法重载 class(和命名空间)中的函数
C++ Unable to overload function in class (and namespace)
我刚刚在命名空间中创建了一个很酷的 class,因此我想创建 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
^
所以我假设我打错了字什么的,但没有成功。因此,我最终来到了这里。这是最小化的 class:
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++ 不允许将临时变量(右值)绑定到非常量左值引用,这正是您在这里所做的:
return output(DateTime());
您可以通过将参数设为 const
参考来解决此问题:
const string output(const DateTime& time) const;
你需要
const string output(const DateTime& time) const;
您的调用模式 (DateTime()
) 创建了一个临时的。非常量引用不能绑定到临时引用。您需要一个 const 引用。
我刚刚在命名空间中创建了一个很酷的 class,因此我想创建 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
^
所以我假设我打错了字什么的,但没有成功。因此,我最终来到了这里。这是最小化的 class:
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++ 不允许将临时变量(右值)绑定到非常量左值引用,这正是您在这里所做的:
return output(DateTime());
您可以通过将参数设为 const
参考来解决此问题:
const string output(const DateTime& time) const;
你需要
const string output(const DateTime& time) const;
您的调用模式 (DateTime()
) 创建了一个临时的。非常量引用不能绑定到临时引用。您需要一个 const 引用。