C++无法重载类(和命名空间)中的函数
C++ Unable to overload function in class (and namespace)
我刚刚在命名空间中创建了一个很酷的类,因此我想创建两个函数。它们应该具有相同的名称,但参数不同。
但每次我编译它时,它都会说:
.....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
^
所以我以为我错别字了什么的,但没有成功。正因为如此,我才来到这里。以下是最小化类:
格式化程序.h
namespace test {
class Formatter
{
public:
const string output() const;
const string output(DateTime& time) const; //DateTime is another class in the same namespace
}
}
格式化程序.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()
)会创建一个临时呼叫。非常量引用不能绑定到临时引用。你需要一个常量引用。
相关文章:
- 在命名空间中定义函数还是限定函数
- CUDA内核和数学函数的显式命名空间
- 在命名空间中使用全局命名空间中的函数
- 是否可以将函数导入命名空间,但不能导出它?
- 使用另一个命名空间中的函数C++
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 命名空间更改函数定义
- C++命名空间中调用 void 函数的错误
- C++ 17 个友元函数声明和内联命名空间
- MFC 函数来自 :: 命名空间?
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 在头文件中添加命名空间函数
- 命名空间函数的多重定义
- 在多个 cpp 文件中重用未命名的命名空间函数
- 如何正确声明命名空间函数
- 使用 libclang 解析命名空间函数
- C++命名空间函数
- 内联命名空间函数时出错
- 递归std::functional与递归匿名命名空间函数.使用哪一个
- 如何在命名空间函数中使用pragma weak