类对象的C++向量

类对象的C++向量,c++,C++,我有一个名为Movie的类,包含以下私有数据成员: private: string title_ ; string director_ ; Movie_Rating rating_ ; unsigned int year_ ; string url_ ; vector<string> actor_; 当我尝试创建这个类的向量时 vector<Movie> myMovi

我有一个名为Movie的类,包含以下私有数据成员:

private:
    string       title_ ;  
    string       director_ ;  
    Movie_Rating rating_ ;  
    unsigned int year_ ;  
    string       url_ ;  
    vector<string> actor_;
当我尝试创建这个类的向量时

vector<Movie> myMovies;
我得到以下错误:

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'
我哪里做错了?它似乎想要一个复制构造函数,但我已经定义了一个。

向量中的元素必须满足复制可构造的要求;也就是说,它们必须具有可用的副本构造函数。现在,您的复制构造函数是私有的还是受保护的

在C++11中,向量也可以包含可移动的对象,但如果要复制向量,它们仍然需要可复制。

向量中的元素必须满足可复制的构造要求;也就是说,它们必须具有可用的副本构造函数。现在,您的复制构造函数是私有的还是受保护的


在C++11中,向量也可以接受可移动的对象,尽管如果要复制向量,它们仍然需要可复制。

我的猜测是,它反对将临时引用绑定到非常量引用。尝试使用Movie::Movieconst Movie&myMovie作为副本构造函数的签名。

我猜它是在抗议将临时引用绑定到非常量引用。尝试使用Movie::Movieconst Movie&myMovie作为复制构造函数的签名。

将复制构造函数更改为

Movie::Movie(Movie const& myMovie)

或者完全删除它-在这种情况下,似乎DefaultShallowCopy是可以的。

将复制构造函数更改为

Movie::Movie(Movie const& myMovie)

或者完全删除它-在这种情况下,似乎DefaultShallowCopy是可以的。

您复制的构造函数需要如下所示:

Movie::Movie(const Movie& myMovie)

编译器需要常量才能找到它。

您复制的构造函数需要如下:

Movie::Movie(const Movie& myMovie)
编译器需要常量才能找到它。

代码应为:

Movie::Movie(const Movie& myMovie)
{
title_ = myMovie.title_;
director_ = myMovie.director_;
rating_ = myMovie.rating_;
year_ = myMovie.year_;
url_ = myMovie.url_;
actor_ = myMovie.actor_;
}
代码应为:

Movie::Movie(const Movie& myMovie)
{
title_ = myMovie.title_;
director_ = myMovie.director_;
rating_ = myMovie.rating_;
year_ = myMovie.year_;
url_ = myMovie.url_;
actor_ = myMovie.actor_;
}

该标准允许复制构造函数获取常量或非常量引用,尽管前者在实践中更为常见。采用非常量引用的函数不能采用临时对象或常量对象作为参数。该标准允许复制构造函数采用常量或非常量引用,尽管前者在实践中更为常见。采用非常量引用的函数不能采用临时对象或常量对象作为参数。惯用的副本构造函数签名是Movie::Movieconst Movie&myMovie。。。你最好给演员打个招呼,他们有好几个。。。你最好让编译器自动生成复制构造函数,因为那里没有任何特殊的逻辑。惯用的复制构造函数签名是Movie::Movieconst Movie&myMovie。。。你最好给演员打个招呼,他们有好几个。。。你最好让编译器自动生成复制构造函数,因为那里没有任何特殊的逻辑。是的,我没有注意到有几个成员是对象。当然,默认构造函数执行深度复制并尊重对象语义。它创建成员级复制,成员自动处理深度复制。这里不需要用户定义的构造函数。是的,我没有注意到有几个成员是对象。当然,默认构造函数执行深度复制并尊重对象语义。它创建成员级复制,成员自动处理深度复制。此处不需要用户定义的构造函数。