我有一个名为Movie的类,其中包含以下私有数据成员:
private:
string title_ ;
string director_ ;
Movie_Rating rating_ ;
unsigned int year_ ;
string url_ ;
vector<string> actor_;
它还包含以下复制构造函数:
Movie::Movie(Movie& myMovie)
{
title_ = myMovie.title_;
director_ = myMovie.director_;
rating_ = myMovie.rating_;
year_ = myMovie.year_;
url_ = myMovie.url_;
actor_ = myMovie.actor_;
}
当我尝试创建此类的向量时,
vector<Movie> myMovies;
然后接受用户的所有信息到临时Movie
对象(myMovie1
),然后使用回推:
myMovies.push_back(myMovie1);
我收到以下错误:
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\vector(1233) : error C2558: class 'Movie' : no copy constructor available or copy constructor is declared 'explicit'
我哪里错了?它似乎想要一个复制构造函数,但我确实有一个定义。
答案 0 :(得分:4)
我的猜测是,它抗议将临时绑定绑定到非const引用。尝试Movie::Movie(const Movie & myMovie)
作为复制构造函数的签名。
答案 1 :(得分:1)
代码应为:
Movie::Movie(const Movie& myMovie)
{
title_ = myMovie.title_;
director_ = myMovie.director_;
rating_ = myMovie.rating_;
year_ = myMovie.year_;
url_ = myMovie.url_;
actor_ = myMovie.actor_;
}
答案 2 :(得分:0)
vector
中的元素必须符合“可复制构造”的要求;也就是说,它们必须具有可用的复制构造函数。现在,您的复制构造函数是私有的还是受保护的?
在C ++ 11中,vector
也可以使用可移动的对象,但如果要复制vector
,它们仍然需要可复制。
答案 3 :(得分:0)
将复制构造函数更改为
Movie::Movie(Movie const& myMovie)
或完全删除它 - 在这种情况下似乎默认(浅拷贝)是正确的。
答案 4 :(得分:0)
你复制构造函数需要像这样:
Movie::Movie(const Movie& myMovie)
编译器需要const
才能找到它。