非静态成员引用必须与特定对象有关Singleton类C++

问题描述:

我有一个单例类。我想为结构成员分配一个值。但编译器抛出错误为A nonstatic member reference must be relative to a specific object。 请帮帮我,如何解决同样的问题。非静态成员引用必须与特定对象有关Singleton类C++

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

GetInstance应该是static功能。

static abc* GetInstance(); 

访问a应与abc类型的变量。命名abcdabcd

ab->abcd.a 

结构abcd和对象是让人有些困惑。 也许这应该是

struct { 
    int a; 
} abcd; 
+0

当我使结构体为'typedef struct'的时候,我无法从主体访问结构体名称,那我该怎么办? – 2013-04-22 07:15:18

+0

@RasmiRanjanNayak名称结构当然。 – ForEveR 2013-04-22 07:18:35

+0

: - 下拉列表中缺少类名,编译器抛出一个错误,因为“类型名称不被允许”。例如,'typedef struct abcd {...} ;. 'main(){ab-> abcd.a = 5;}'。在abcd中,错误即将发生,'type name is not allowed' – 2013-04-22 07:19:41

abc *ab = abc::GetInstance(); 

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

abc::abcd.a = 5; 

这里,abc::abcd是类型。据推测,你需要参考abcd实例abc实例指着ab

ab->abcd.a = 5; 

你真的应该从给实例和类型相同的名称(如struct abcd和实例abcd)避免。

+1

@ForEveR谢谢。我对所有'ab','abc'和'abcd'都感到困惑。 – juanchopanza 2013-04-22 07:00:45