非静态成员引用必须与特定对象有关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
类型的变量。命名abcd
abcd
型
ab->abcd.a
结构abcd
和对象是让人有些困惑。 也许这应该是
struct {
int a;
} abcd;
答
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
当我使结构体为'typedef struct'的时候,我无法从主体访问结构体名称,那我该怎么办? – 2013-04-22 07:15:18
@RasmiRanjanNayak名称结构当然。 – ForEveR 2013-04-22 07:18:35
: - 下拉列表中缺少类名,编译器抛出一个错误,因为“类型名称不被允许”。例如,'typedef struct abcd {...} ;. 'main(){ab-> abcd.a = 5;}'。在abcd中,错误即将发生,'type name is not allowed' – 2013-04-22 07:19:41