为什么我在Visual C ++ 2010中的代码中继续出现以下错误,如何在保持成员变量的类型推断功能的同时修复它?
错误C2825:
'Foo<T>::value_type':
后面的'::'
必须是类或命名空间
template<class T>
struct Foo
{
typedef typename T::value_type value_type;
template<class M>
void foo(M value_type::*member) const; // error
};
struct S { typedef int value_type; };
int main() { Foo<S> s; }
答案 0 :(得分:3)
模板参数T
原型为S
,因此value_type
原来是int
(S
中的嵌套类型)。那你怎么写value_type::*member
?请注意,结果是int::*member
没有意义。 int
不是类类型。
我认为您的意思是T::*member
而不是value_type::*member
。
答案 1 :(得分:0)
value_type不是结构S的成员。 它只是一个typedef,所以你不能像你一样访问它。