Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++ - Fatal编程技术网

C++ C++;我可以向推荐会员申报吗?

C++ C++;我可以向推荐会员申报吗?,c++,C++,在h文件中,我声明: static IDataSynchronization& sync_data_; 但在cpp中,我有sync_data_u3;的编译错误: IDataSynchronization& MasterSlaveSynchronize::sync_data_; 错误是: MasterSlaveSynchronize::sync_data_ declared as reference but not initialized 我可以,但我不想把is声明为指针,我

在h文件中,我声明:

static IDataSynchronization& sync_data_;
但在cpp中,我有sync_data_u3;的编译错误:

IDataSynchronization& MasterSlaveSynchronize::sync_data_;
错误是:

MasterSlaveSynchronize::sync_data_ declared as reference but not initialized
我可以,但我不想把is声明为指针,我想知道这里的问题是什么,是否有办法绕过它

我无法在声明时初始化,因为这是一种将在安装时传递的回调(无构造函数,静态安装)


谢谢

您可以,但您需要初始化它:

IDataSynchronization& MasterSlaveSynchronize::sync_data_ = something;

引用必须在声明中初始化。如果从你的评论看来你不能做到这一点,那么你将不得不求助于指针。这里没有第三个选项。

必须在创建引用时初始化引用。但如果未初始化,则必须将此引用设置为某个变量。通过
IDataSynchronization&MasterSlaveSynchronize::sync\u data\uuuxx我只能在Runinite上设置它,所以使用引用不能帮助回调impl.愚蠢的问题-为什么在h文件中它没有抱怨,编译错误在cpp中?因为它们必须在定义中初始化,而不是像David说的那样在声明中初始化。由于定义不在头文件中,因此在.h中没有抱怨,但David消息的基本部分是,如果在初始化时不知道引用的是什么,则必须使用指针。我从cpp中删除了定义,现在它已编译好,安装程序和执行程序。@user1495181:删除定义将使其编译(和链接),直到您在程序中实际使用该成员为止。在这一点上,它将无法链接,抱怨没有定义静态成员(或缺少符号或类似的东西,取决于编译器)