非静态成员引用必须相对于特定对象Singleton类C ++

时间:2013-04-22 06:53:08

标签: c++ singleton

我有一个单身人士课程。我想为结构成员分配一个值。但编译器抛出错误为A nonstatic member reference must be relative to a specific object。 请帮帮我,如何解决。

class abc{

    static abc* m_selfInst;
public:

    struct abcd{
        int a;
    }abcd;

abc* GetInstance();
};

abc* abc::m_selfInst = NULL;

abc* abc::GetInstance()
{
    if(m_selfInst == NULL)
    {
        m_selfInst = new abc();
    }
    return m_selfInst;
}
int main()
{
    abc *ab = abc::GetInstance(); //Error Occurs here
    abc::abcd.a = 5; //Error occurs here too
    //cout <<ab.abcd.a << "\n";

    return 0;
}

2 个答案:

答案 0 :(得分:4)

abc *ab = abc::GetInstance();

GetInstance()方法必须声明为static,否则只能在abc的实例上调用。

abc::abcd.a = 5;

此处,abc::abcd是类型。大概是,您需要引用abcd指向的abc 实例ab 实例

ab->abcd.a = 5;

您应该避免为实例和类型指定相同的名称(如struct abcd和实例abcd)。

答案 1 :(得分:2)

GetInstance应为static函数。

static abc* GetInstance();

a的访问权应使用abc类型的变量。

ab->abcd.a

struct abcd和名为abcd的{​​{1}}类型的对象真的令人困惑。 可能它应该是

abcd