使用;结构xxx<>;::val";模板内元编程导致错误 我在Strut中使用EnUM编写了一个基本的C++模板元编程演示,计算Fibonacci,它不在GCC 4.9或MSVC 14上编译。 #include <iostream> using namespace std; template <int N> struct fib { enum {val = fib<N-1>::val + fib<N-2>::val}; }; template <> struct fib<1> { enum {val = 1}; }; template<> struct fib<2> { enum {val =2}; }; int main() { // error: 'val' in 'struct fib<4>' does not name a type struct fib<4>::val; // expected ';' before 'struct // expected primary-expression before '<<' token cout << struct fib<40>::val; cout << fib<40>::val; // works return 0; } #包括 使用名称空间std; 模板 结构纤维{ 枚举{val=fib::val+fib::val}; }; 模板 结构纤维{ 枚举{val=1}; }; 模板 结构纤维{ 枚举{val=2}; }; int main(){ //错误:“struct fib”中的“val”未命名类型 结构fib::val; //结构之前应为“;” /'/'预期的原表达式在'

使用;结构xxx<>;::val";模板内元编程导致错误 我在Strut中使用EnUM编写了一个基本的C++模板元编程演示,计算Fibonacci,它不在GCC 4.9或MSVC 14上编译。 #include <iostream> using namespace std; template <int N> struct fib { enum {val = fib<N-1>::val + fib<N-2>::val}; }; template <> struct fib<1> { enum {val = 1}; }; template<> struct fib<2> { enum {val =2}; }; int main() { // error: 'val' in 'struct fib<4>' does not name a type struct fib<4>::val; // expected ';' before 'struct // expected primary-expression before '<<' token cout << struct fib<40>::val; cout << fib<40>::val; // works return 0; } #包括 使用名称空间std; 模板 结构纤维{ 枚举{val=fib::val+fib::val}; }; 模板 结构纤维{ 枚举{val=1}; }; 模板 结构纤维{ 枚举{val=2}; }; int main(){ //错误:“struct fib”中的“val”未命名类型 结构fib::val; //结构之前应为“;” /'/'预期的原表达式在',c++,templates,struct,template-meta-programming,C++,Templates,Struct,Template Meta Programming,Valu/Co> >之前是一个值,不是一个类型。不能用“代码>结构> 来前缀,就像你不能说“代码>结构1”/代码>。还有,删除“多产结构> 用法,因为它在C++中已过时了。 Val< /Cord>是一个值,不是一个类型。不能用前缀。结构< >就像你不能说“代码>结构1”/代码>,也就是说,“多行结构> 用法,因为它在C++中已经过时了。< / P>这两行都不是声明。它们声明什么?嗯,两行都不是声明。它们会声明什么?谢谢。我个人从来没有添加过多。“结构",而这段代码只是为了试验如果我这样做会发

<代码> Valu/Co> >之前是一个值,不是一个类型。不能用“代码>结构> <代码>来前缀,就像你不能说“代码>结构1”/代码>。还有,删除“多产<代码>结构> <代码>用法,因为它在C++中已过时了。

<代码> Val< /Cord>是一个值,不是一个类型。不能用<代码>前缀。结构< <代码> >就像你不能说“代码>结构1”/代码>,也就是说,“多行<代码>结构> <代码>用法,因为它在C++中已经过时了。< / P>这两行都不是声明。它们声明什么?嗯,两行都不是声明。它们会声明什么?谢谢。我个人从来没有添加过多。“结构",而这段代码只是为了试验如果我这样做会发生什么。最初我认为
struct fib
应该与
fib
有效地相同,因为前者只是尝试与C兼容。我想你想说的是,当与模板一起使用时,这个表单会触发歧义,所以它根本不起作用?
struct fib
fib
相同。但是
fib
fib::val
非常不同。谢谢。我知道fib::val是通过模板struct fib访问的枚举类型。但是我把struct放在前面,希望达到(struct fib)的效果::val,其中括号正是我所想的,编译器会将
struct fib
识别为
fib
,然后继续执行
fib::val
。我想它不会这样工作,但为什么?谢谢。我个人从不添加过多的“struct”,而这段代码只是为了试验如果我这样做会发生什么。最初我认为
struct fib
应该与
fib
有效地相同,因为前者只是尝试与C兼容。我想你想说的是,当与模板一起使用时,这个表单会触发歧义,所以它根本不起作用?
struct fib
fib
相同。但是
fib
fib::val
非常不同。谢谢。我知道fib::val是通过模板struct fib访问的枚举类型。但是我把struct放在前面,希望达到(struct fib)的效果::val其中的括号正是我心目中的编译器将
struct fib
识别为
fib
并继续执行
fib::val
。我猜它不是这样工作的,但为什么?