请给我指导。我必须编写一个程序,其中包含一个名为VectorCollection的类,该类将用于存储实例类型为string的 vector 的集合。我收到以下错误



当我尝试使用cout << (*it) << endl;输出 vector 时

我有点不愿意在论坛上提出完整的作业问题,但是为了避免造成混淆。我认为我可能完全偏离了轨道,因此任何指导都将适用。

编写一个cpp程序,其中包含一个名为VectorCollection的类,该类将用于存储实例类型为string的 vector 的集合。
编写一个参数构造函数,该构造函数接收用于初始化集合中值的字符串数组。
添加功能以将实例添加到集合,从集合中删除实例,从集合中删除所有条目并显示整个集合。
还要覆盖*运算符,以便它返回两个VectorCollection对象的交集。
编写一个程序来测试类中的所有成员函数和重载运算符。
接下来,修改main函数,以便代替为每个Movie对象创建单独的变量,而使用示例数据创建至少4个Movie对象的数组。遍历数组并输出四部电影中每部电影的名称,MPAA评分和平均评分。

//movies.h
//******************************************************************************************************
using namespace std;


#ifndef movies_H
#define movies_H

class VectorCollection
{
    //member variables
        string newtitle,newgentre,newmpaa,newrating;
        vector<VectorCollection> movies;

    public:
        //function declarations

        //default constructor
        VectorCollection();

        //overload constructor
        VectorCollection(string,string,string,string);

        //destructor
        ~VectorCollection();

        void settitle(string);
        void setgentre(string);
        void setmpaa(string);
        void setrating(string);
        void display(vector<VectorCollection>);

};

 #endif // MOVIES_H_INCLUDED


//movies.cpp
//******************************************************************************************************
//constructor definition
VectorCollection::VectorCollection()
{

}

//overloaded constructor def
VectorCollection::VectorCollection(string title,string gentre,string mpaa,string rating)
{
    newtitle = title;
    newgentre = gentre;
    newmpaa = mpaa;
    newrating = rating;
}

//destructor def
VectorCollection::~VectorCollection()
{

}

//mutator function
void VectorCollection::settitle(string title)
{
    newtitle = title;
}

//mutator function
void VectorCollection::setgentre(string gentre)
{
    newgentre = gentre;
}

//mutator function
void VectorCollection::setmpaa(string mpaa)
{
    newmpaa = mpaa;
}

//mutator function
void VectorCollection::setrating(string rating)
{
    newrating = rating;
}

void VectorCollection::display(vector<VectorCollection> movies)
{
    vector<VectorCollection>::iterator it;

    for ( it = movies.begin(); it < movies.end(); ++it)
    {
        //copy(movies.begin(),movies.end(),ostream_iterator<string>(cout," "));
        cout << (*it) << endl;
    }

}

//main.cpp
//******************************************************************************************************
#include <iostream>
#include <string>

#include "movies.h"

using namespace std;

int main()
{
    string title,gentre,mpaa,rating;
    vector<VectorCollection> movies;
    movies.assign(4,VectorCollection());
    VectorCollection *a_movie;
    VectorCollection list;

    for (int i = 0; i < 3; i++)
    {

        cout << "Enter the title : ";
        cin >> title;
        cout << "Enter the gentre: ";
        cin >> gentre;
        cout << "Enter the MPAA: ";
        cin  >> mpaa;
        cout << "Enter the rating: ";
        cin >> rating;
        a_movie = new VectorCollection;
        a_movie ->settitle(title);
        a_movie ->setgentre(gentre);
        a_movie ->setmpaa(mpaa);
        a_movie ->setrating(rating);
        movies.push_back(*a_movie);
        cin.get();

    }

    list.display(movies);
    return 0;
}

最佳答案

除了已经指出的所有其他问题之外,您的std::vector<VectorCollection>类中还有一个VectorCollection

标准容器不能容纳不完整的类型。如果要执行此操作,则应该有一个指向VectorCollection的指针 vector ,或者使用专门用于保存指向类的指针的boost::ptr_vector
Boost.Container也将允许您执行正在尝试的操作。

关于c++ - C++,错误与运算符不匹配<<,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18314091/

10-11 23:05