gpt4 book ai didi

c++ - 为什么在涉及模板类时派生类无法访问基函数

转载 作者:可可西里 更新时间:2023-11-01 17:32:44 27 4
gpt4 key购买 nike

以下代码给出了编译错误:

template <typename T>
class Base
{
public:
void bar(){};
};

template <typename T>
class Derived : public Base<T>
{
public:
void foo() { bar(); } //Error
};

int main()
{
Derived *b = new Derived;
b->foo();
}

错误

第 12 行:错误:“bar”没有依赖于模板参数的参数,因此“bar”的声明必须可用

为什么会出现这个错误?

最佳答案

名字foo()不依赖于任何 Derived的模板参数 - 这是一个非依赖名称。 foo() 所在的基类另一方面,找到了 - Base<T> - 确实依赖于 Derived 之一的模板参数(即 T ),因此它是一个依赖基类。 C++ 在查找非依赖名称时不查找依赖基类。

要解决此问题,您需要限定对 bar() 的调用在 Derived::foo()作为 this->bar()Base<T>::bar() .

这个 C++ FAQ 条目很好地解释了它:参见 http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19

关于c++ - 为什么在涉及模板类时派生类无法访问基函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311979/

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