为什么我在 Visual C++ 2010 中的这段代码中不断出现以下错误,如何在保持成员变量的类型推断能力的同时修复它?
error C2825:
'Foo<T>::value_type':
must be a class or namespace when followed by'::'
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; }
最佳答案
模板参数 T
结果是 S
类型,因此 value_type
结果是 int
( S
中的嵌套类型)。那么如何编写 value_type::*member
呢?请注意,结果是 int::*member
,这是没有意义的。 int
不是类类型。
我想你的意思是 T::*member
而不是 value_type::*member
。
关于c++ - 将指向成员变量的指针作为参数时出错;为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877464/