此代码片段无法编译:
struct M {
int i;
int j;
};
void f(M& m) {
m.i++;
}
struct N {
M m;
void f(int i) {
f(m); // compilation error
}
};
铿锵 说:No viable conversion from 'M' to 'int'
看来我的成员函数隐藏了全局函数。
我将错误行更改为::f(m)
帮助名称解析,但仍然失败。这是否意味着在C++成员函数中,不能调用具有相同名称但不同参数列表的全局重载函数?
如何解决这个问题?
谢谢!
C++ 成员函数hides全局函数
The problem是调用表达式f(m)
姓名查询找到成员函数N::f(int)
因此搜索/查找停止。现在找到了成员函数N::f(int)
有一个类型的参数int
但我们正在传递一个类型的参数M
并且由于没有隐式转换M
to int
,本次调用失败。
To solve这个,使用范围operator::
告诉编译器您要调用全局函数f
如下所示:
struct N {
M m;
void f(int i) {
//------vv---------->use the scope operator :: to call the global version
::f(m);
}
};
工作演示 https://godbolt.org/z/Pxh6re9ee
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)