我正在构建一个小的C++应用程序,我希望为我的参考持有者制作一个私人的拷贝构造函数。
当我在main中使用我的类时,一切都正常,但是当我尝试用Google Test测试它时,我得到一个错误,声明我的复制构造函数是私有的
TEST (Library, constructorParams) {
Library lib = Library("my Library");
ASSERT_EQ("my Library", lib.getNom());
}H(在我的.cpp中没有对复制构造函数和赋值操作符的定义)
class Library {
public:
...
private:
...
Library (const Library& obj);
Library & operator=(const Library& obj);
};为什么我的私有拷贝构造函数会出现错误(这在我的测试中可能是一个糟糕的用法?)
发布于 2013-04-29 01:43:41
这里
Library lib = Library("my Library");您正在从RHS上构造的临时对象执行语义上的复制构造。即使编译器可能会优化复制,复制构造函数也需要是可公开访问的。
试着这样做:
Library lib("my Library");请参阅copy initialization上的更多内容。
发布于 2013-04-29 01:42:42
Library lib = Library("my Library");在这一行中,您试图复制构造一个Library类型的对象,但这不能完成,因为它的复制构造函数是私有的。相反,您应该这样做:
Library lib("my Library");发布于 2013-04-29 01:45:39
您将从此行代码中调用复制构造函数
Library lib = Library("my Library");并且您已经将它定义为该类的私有方法。
该操作与调用赋值运算符(您在问题中提到的)无关,如果您考虑它的等价物,这一点就会更清楚:
Library lib(Library("my Library")); // Here the invocation of the copy
// constructor is more explicit使用这种格式的代码,与调用复制构造函数来创建该对象的另一个实例相比,不需要首先在临时对象中创建对象。
正确的方法应该是:
Library lib("my Library");https://stackoverflow.com/questions/16265736
复制相似问题