非静态成员引用必须相对于特定的c++对象单例类

A nonstatic member reference must be relative to a specific object Singleton class C++

本文关键字:c++ 对象 单例类 相对于 静态成员 引用      更新时间:2023-10-16

我有一个单例类。我想给一个结构成员赋值。但是编译器抛出一个错误作为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;
}
abc *ab = abc::GetInstance();

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

abc::abcd.a = 5;

这里,abc::abcd是type。假设,您需要引用指向ab:

abc 实例abcd 实例
ab->abcd.a = 5;

您应该避免给实例和类型赋予相同的名称(如struct abcd和实例abcd)。

GetInstance应该是static的功能

static abc* GetInstance();

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

ab->abcd.a

结构体abcdabcd类型的对象命名为abcd真的很混乱。可能应该是

struct {
    int a;
} abcd;