gpt4 book ai didi

c++ - 关于从派生类在基类中实现的C++调用虚函数的问题

转载 作者:行者123 更新时间:2023-11-30 02:13:48 24 4
gpt4 key购买 nike

下面的代码有什么问题?

struct A {
virtual int hash() const = 0;
virtual int hash(int x) const = 0;
};

struct B : public A {
int hash() const final {
return 10;
};

int hash(int x) const override {
return 10;
};
};

struct C : public B {
int hash(int x) const override {
return x;
}
};

#include <iostream>

int main() {
C a;
std::cout << a.hash() << std::endl;
std::cout << a.hash(20) << std::endl;
return 0;
}

我遇到编译错误,错误信息如下

xx.cc:26:23: error: too few arguments to function call, single argument 'x' was
not specified
std::cout << a.hash() << std::endl;
~~~~~~ ^
xx.cc:17:3: note: 'hash' declared here
int hash(int x) const override {
^
1 error generated.

最佳答案

这是名称隐藏问题。根据name lookup的规则,

(强调我的)

name lookup examines the scopes as described below, until it finds at least one declaration of any kind, at which time the lookup stops and no further scopes are examined.

因此 C::hash 对基类隐藏了名称。

您可以应用 using 将名称引入类 C 作用域。

struct C : public B {
using B::hash;
int hash(int x) const override {
return x;
}
};

关于c++ - 关于从派生类在基类中实现的C++调用虚函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58848959/

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