gpt4 book ai didi

c++ - 为什么在 `template` 类的枚举上使用声明不起作用?

转载 作者:行者123 更新时间:2023-11-30 05:40:30 25 4
gpt4 key购买 nike

编译:

template <typename T> class Parent { public:
enum MyEnum { RED,GREEN,BLUE };
};
class Child : public Parent<int> { public:
using Parent<int>::MyEnum;
int foo() { return GREEN; }
};
void tester() { Child d; d.foo(); }

这不是(在 gcc 上,输出 error: 'GREEN' was not declared in this scope):

template <typename T> class Parent { public:
enum MyEnum { RED,GREEN,BLUE };
};
template <typename T> class Child : public Parent<T> { public:
using Parent<T>::MyEnum;
int foo() { return GREEN; }
};
void tester() { Child<int> d; d.foo(); }

我的问题:为什么?(另外,有什么解决方法的建议吗?)

最佳答案

对于第二个代码:

  1. 您需要添加 typename 关键字,因为您访问的类型 MyEnum 依赖于 T。将 using 行更改为:

using typename Parent<T>::MyEnum;

  1. 然后,在方法foo您需要像这样指定 GREEN 是枚举 MyEnum 的成员:

int foo() { return MyEnum::GREEN; }

用 gcc 编译对我来说很好,用 C++11 编译得很好
实例here

它在第一个示例中起作用,因为 using 行中的 MyEnum 不依赖于模板类型 T。您明确使用了 int 类型的 Parent。

关于c++ - 为什么在 `template` 类的枚举上使用声明不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31602332/

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