C ++类对象的向量

时间:2010-04-14 17:52:54

标签: c++

我有一个名为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'

我哪里错了?它似乎想要一个复制构造函数,但我确实有一个定义。

5 个答案:

答案 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才能找到它。