Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 非静态成员引用必须相对于特定对象单例类C++;_C++_Singleton - Fatal编程技术网

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

C++ 非静态成员引用必须相对于特定对象单例类C++;,c++,singleton,C++,Singleton,我有一个单身班。我想为结构成员指定一个值。但是编译器抛出一个错误,即非静态成员引用必须是相对于特定对象的。 请帮助我,如何解决同样的问题 class abc{ static abc* m_selfInst; public: struct abcd{ int a; }abcd; abc* GetInstance(); }; abc* abc::m_selfInst = NULL; abc* abc::GetInstance() { if(m

我有一个单身班。我想为结构成员指定一个值。但是编译器抛出一个错误,即非静态成员引用必须是相对于特定对象的。 请帮助我,如何解决同样的问题

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类{
静态abc*m_selfInst;
公众:
结构abcd{
INTA;
}abcd;
abc*GetInstance();
};
abc*abc::m_selfInst=NULL;
abc*abc::GetInstance()
{
如果(m_selfInst==NULL)
{
m_selfInst=新abc();
}
返回m_selfInst;
}
int main()
{
abc*ab=abc::GetInstance();//此处发生错误
abc::abcd.a=5;//此处也发生错误

//cout
GetInstance
应该是
static
函数

static abc* GetInstance();
a
的访问应使用类型为
abc
的变量

ab->abcd.a
abc::abcd.a = 5;
结构
abcd
和名为
abcd
的类型为
abcd
的对象确实令人困惑。 也许应该是这样

struct {
    int a;
} abcd;

GetInstance
应该是
static
函数

static abc* GetInstance();
a
的访问应使用类型为
abc
的变量

ab->abcd.a
abc::abcd.a = 5;
结构
abcd
和名为
abcd
的类型为
abcd
的对象确实令人困惑。 也许应该是这样

struct {
    int a;
} abcd;
必须声明
GetInstance()
方法
static
,否则只能在
abc
的实例上调用它

ab->abcd.a
abc::abcd.a = 5;
这里,
abc::abc
是类型。您可能需要参考指向
ab
abc
实例的
abc
实例:

ab->abcd.a = 5;
实际上,您应该避免给实例和类型赋予相同的名称(如在
struct abcd
和instance
abcd
中)

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

ab->abcd.a
abc::abcd.a = 5;
这里,
abc::abc
是类型。您可能需要参考指向
ab
abc
实例的
abc
实例:

ab->abcd.a = 5;

实际上,您应该避免给实例和类型赋予相同的名称(如在
struct abou
和实例
abou
中).

@永远谢谢。我被所有的
ab
abc
abc
s弄糊涂了。永远谢谢。我被所有的
ab
abc
abc
弄糊涂了。当我将结构设置为
typedef struct
时,我无法从主目录访问结构名称,我该怎么办?:-下拉列表中缺少类名,不允许编译器抛出错误,因为
类型名是不允许的
。例如,
typedef struct abcd{…};
main(){ab->abcd.a=5;}
.abcd出现错误,因为不允许使用
类型名称`@rasmiranjanayak你在做什么?为什么
typedef
?使用
struct-struct\u-name{…}结构代码是结构的名称。可能是你试图阅读关于C++的书籍。我得到了答案。thnnk为你的帮助。当我构造结构为<代码> TyPufFrase GTI时,我不能从主目录访问结构名称,那么我该怎么办?:从下拉列表中删除类名,编译器抛出一个n不允许出现类型名为
的错误
。例如,
typedef struct abcd{…};
main(){ab->abcd.a=5;}
。在abcd时,错误是因为类型名不允许出现
你在做什么?为什么
typedef
?使用
struct struct\u name{…}ABS/<代码>结构StReNEX是Strut的名字。你可以试着阅读关于C++的书籍吗?我得到了答案。