c++ - 将指向成员变量的指针作为参数时出错;为什么?

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

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

相关文章:

c++ - QLabel show 命令打开新窗口

c++ - 创建指向列表中对象的指针映射?

c++ - Visual Studio 201 0's strange "警告 LNK4042"

c++ - 如何计算图像的分辨率?

c++ - 指向具有不同编译器的成员函数的指针

c++ - 向下转换指向成员函数的指针

c++ - 如何使用函数指针调用对象的方法?

c++ - 调用了虚函数,使用了父函数

c++ - Boost::Signals 的意义何在?

c++ - 字符串迭代器不可取消引用的 C++ 问题