C++;私有副本构造函数问题 我正在构建一个小型的C++应用程序,我想为我的参考持有者做一个私人复制的构造器。
当我在main中使用我的类时,一切都正常,但是当我尝试用googletest测试它时,我得到一个错误,指出我的复制构造函数是私有的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中没有复制构造函数和赋值运算符的定义) 为什么我的私有副本构造函数会出错(这可能是测试中的
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");