我不知道如何从模板化类中访问枚举类枚举数,无论是作为返回值还是只是一个值。正如您在以下示例中看到的那样,我完全一无所知。我用谷歌搜索了错误消息,但没有成功。
很高兴您能指出正确的语法。
首先这些是错误:
$ g++ -Wall -std=c++11 -o main.out main.cpp
main.cpp:25:1: 错误:在“C::Values”之前需要“typename”,因为“C”是一个依赖范围
C::Values C::Get()//<-- 此处出错 ... ^ main.cpp:在函数“int main()”中: main.cpp:35:2: 错误:在没有模板参数的情况下使用“模板类 C”
C::Values 值;//<-- ... 和这里
^
$
这是完整的示例,因此可以对其进行测试:
template<int Val>
class C
{
public:
enum class Values{ one, two };
C();
Values Get();
private:
int val;
};
template<int Val>
C<Val>::C() : val{ Val } {}
template<int Val>
C<Val>::Values C<Val>::Get() // <-- Error here ...
{
return Values::one;
}
int main(void)
{
C<5> aVariable;
C::Values values; // <-- ... and here
return 0;
}
先谢谢你!!
最佳答案
你需要帮助编译器告诉 Value
是类型名:
template<int Val>
typename C<Val>::Values C<Val>::Get()
在第二种情况下,您还需要提供模板参数,例如0
:
C<0>::Values values;
您可以阅读 Officially, what is typename for? 的这个答案以获得更多解释。
关于c++ - 调用模板化类中的枚举类枚举器的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49374765/