首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++成员函数隐藏全局函数

c++成员函数隐藏全局函数
EN

Stack Overflow用户
提问于 2022-09-03 08:36:23
回答 1查看 54关注 0票数 -2

此代码段不编译:

代码语言:javascript
复制
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++成员函数中,不能调用同名但不同参数列表的全局重载函数?

怎么解决这个问题?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-03 08:45:35

c++成员函数隐藏全局函数

问题是对于调用表达式,f(m)名称查找查找成员函数N::f(int),因此搜索/查找停止。现在这个找到的成员函数N::f(int)有一个int类型的参数,但是我们传递一个M类型的参数,并且由于没有从Mint的隐式转换,这个调用失败了。

要解决这一问题,请使用作用域operator::告诉编译器您要调用全局函数f,如下所示:

代码语言:javascript
复制
struct N {
    M m;
    void f(int i) {
//------vv---------->use the scope operator :: to call the global version
        ::f(m); 
    }
};

工作演示

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73590799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档