0

Why do I keep on getting the following error in this code in Visual C++ 2010, and how do I fix it while maintaining the type inference capability for the member variable?

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; }
4

2 に答える 2

3

テンプレートパラメータTはtypeSであることvalue_typeが判明したため、int(でネストされたタイプ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 に答える