gpt4 book ai didi

c++ - 这种继承有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:24 25 4
gpt4 key购买 nike

我只是不明白。在 VC++ 2008 和 G++ 4.3.2 上试过

#include <map>


class A : public std::multimap<int, bool>
{
public:
size_type erase(int k, bool v)
{
return erase(k); // <- this fails; had to change to __super::erase(k)
}
};

int main()
{
A a;
a.erase(0, false);
a.erase(0); // <- fails. can't find base class' function?!

return 0;
}

最佳答案

当您在类中声明一个与父类(super class)同名但签名不同的函数时,名称解析规则规定编译器应该停止寻找您尝试调用一次的函数它找到第一个匹配项。按名称找到函数后,然后应用重载解析规则。

所以发生的事情是,当您调用 erase(0) 时,编译器发现了您对 erase(int, bool) 的实现,然后决定参数不存在匹配。

关于c++ - 这种继承有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/281698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com