指向成员和静态变量

时间:2013-12-12 23:33:48

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

为什么我不能这样pointer to member

#include <iostream>
#include <stdlib.h>     /* malloc, free, rand */
using namespace std;

class Pool{};

struct FE{
    static Pool pool;
};

Pool FE::pool;

int main() {
    Pool FE::* pmd = &FE::pool;
    return 0;
}

http://ideone.com/UabI61

我做错了什么?

2 个答案:

答案 0 :(得分:4)

指向成员的指针基本上是对象的偏移。也就是说,如果您有一个FE对象,则指向成员的指针指示与每个FE对象的地址的常量偏移量。 static对象不会与每个FE对象具有常量偏移量。因此,&FE::pool的类型为Pool*而非Pool FE::*。两种指针类型不兼容。

答案 1 :(得分:0)

pool是一个全局变量,恰好位于FE的范围内;指向成员的指针只指向实例类的成员。