0

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

2 回答 2

3

模板参数T原来是 type S,因此value_type原来是int(嵌套类型 in S)。那你怎么写value_type::*member?请注意,事实证明int::*member这是没有意义的。int不是类类型。

我想你的意思是T::*member而不是value_type::*member.

于 2012-08-09T05:58:38.517 回答
0

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

于 2012-08-09T06:15:11.207 回答