将成员变量指针作为参数时出错;为什么?

时间:2012-08-09 05:51:59

标签: c++ visual-c++ pointer-to-member

为什么我在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; }

2 个答案:

答案 0 :(得分:3)

模板参数T原型为S,因此value_type原来是intS中的嵌套类型)。那你怎么写value_type::*member?请注意,结果是int::*member没有意义。 int不是类类型。

我认为您的意思是T::*member而不是value_type::*member

答案 1 :(得分:0)

value_type不是结构S的成员。 它只是一个typedef,所以你不能像你一样访问它。