此代码段不编译:
struct M {
int i;
int j;
};
void f(M& m) {
m.i++;
}
struct N {
M m;
void f(int i) {
f(m); // compilation error
}
};clang说:No viable conversion from 'M' to 'int'似乎是我的成员函数隐藏的全局函数。
我将错误行更改为::f(m)以帮助名称解析,但仍然失败。这是否意味着在c++成员函数中,不能调用同名但不同参数列表的全局重载函数?
怎么解决这个问题?谢谢!
发布于 2022-09-03 08:45:35
c++成员函数隐藏全局函数
问题是对于调用表达式,f(m)名称查找查找成员函数N::f(int),因此搜索/查找停止。现在这个找到的成员函数N::f(int)有一个int类型的参数,但是我们传递一个M类型的参数,并且由于没有从M到int的隐式转换,这个调用失败了。
要解决这一问题,请使用作用域operator::告诉编译器您要调用全局函数f,如下所示:
struct N {
M m;
void f(int i) {
//------vv---------->use the scope operator :: to call the global version
::f(m);
}
};https://stackoverflow.com/questions/73590799
复制相似问题