gpt4 book ai didi

c++ - 在 C++ 中嵌套在模板中的类中使用基类的成员时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:03 26 4
gpt4 key购买 nike

考虑以下示例:

template <typename T>
struct A {
struct B {
int b;
};

struct C : B {
void f() {
b = 0;
}
};
};

用 GCC 4.8.1 编译它会出现以下错误:

test.cc: In member function ‘void A<T>::C::f()’:
test.cc:9:11: error: ‘b’ was not declared in this scope
b = 0;
^

但是,b 是父类 B 的成员(我在示例中使用了 struct 来公开所有内容)并且如果我使 A 非模板一切编译。

为什么编译器会报错,我该如何避免?

最佳答案

这在语言中是一种晦涩的极端情况,但解决方案很简单,限定它:

this->b = 0; // alternatively 'B::b = 0;'

原因是没有资质b不是从属名称,需要在第一遍查找中解析它,然后再将实际类型替换到模板中。此时编译器不知道是否可以对 A<T>::B 进行特化。对于将被实例化的类型,或者该特化是否可能具有 b成员(member)。

关于c++ - 在 C++ 中嵌套在模板中的类中使用基类的成员时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23222726/

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