Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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++_Syntax - Fatal编程技术网

C++;私有副本构造函数问题 我正在构建一个小型的C++应用程序,我想为我的参考持有者做一个私人复制的构造器。

C++;私有副本构造函数问题 我正在构建一个小型的C++应用程序,我想为我的参考持有者做一个私人复制的构造器。,c++,syntax,C++,Syntax,当我在main中使用我的类时,一切都正常,但是当我尝试用googletest测试它时,我得到一个错误,指出我的复制构造函数是私有的 TEST (Library, constructorParams) { Library lib = Library("my Library"); ASSERT_EQ("my Library", lib.getNom()); } Library.h(my.cpp中没有复制构造函数和赋值运算符的定义) 为什么我的私有副本构造函数会出错(这可能是测试中的

当我在main中使用我的类时,一切都正常,但是当我尝试用googletest测试它时,我得到一个错误,指出我的复制构造函数是私有的

TEST (Library, constructorParams) {
    Library lib = Library("my Library");
    ASSERT_EQ("my Library", lib.getNom());
}
Library.h(my.cpp中没有复制构造函数和赋值运算符的定义)

为什么我的私有副本构造函数会出错(这可能是测试中的错误用法?)

在这一行中,您尝试复制构造一个类型为
Library
的对象,但这无法完成,因为它的复制构造函数是私有的。您应该这样做:

Library lib("my Library");
Library lib("my Library");
这里

在语义上,您正在从RHS上构造的临时对象执行副本构造。即使大多数编译器可能会优化拷贝输出,拷贝构造函数也需要公开访问

请尝试以下方法:

Library lib("my Library");

有关详细信息,请参见。

您正在从这行代码调用复制构造函数

Library lib = Library("my Library");
您已经将它定义为该类的私有方法

该操作与调用赋值运算符(在该问题中提到的)无关,如果您考虑它的等价性:这是更清楚的:

Library lib(Library("my Library"));  // Here the invocation of the copy 
                                     // constructor is more explicit
使用这种格式的代码,更清楚的是,不需要先在临时文件中创建对象,而需要调用复制构造函数来创建该对象的另一个实例

正确的方法应该是:

Library lib = Library("my Library");
Library lib(Library("my Library"));  // Here the invocation of the copy 
                                     // constructor is more explicit
Library lib("my Library");