为什么我的程序无法从结构中识别变量?

时间:2019-05-06 16:45:08

标签: c++ vector struct

我正在尝试创建一个基于范围的循环以填充我的一个类中实验室的结构向量。问题是当我写

之类的东西时
"movieInfo.Title.push_back(tempTitle);" 

无法识别“标题”是结构“电影”中的字符串。

我已经尝试使用“ emplace_back”并尝试直接填充向量。练习提示是修改具有相同主题但带有结构矢量的矢量实验室。

我的结构如下

    struct movie 
{ 
    std::string Title, Director, Genre, Year, runningTime;
};

,并且在main中定义为

vector<movie> movieInfo{};

最后,我的“ for”循环写为

for (int i = 0; i < 20; i++)
{
    string tempTitle, tempDirector, tempGenre, tempYear, tempTime;

    getline(inFile, tempTitle, ',');
    movieInfo.Title.push_back(tempTitle);
    getline(inFile, tempDirector, ',');
    movieInfo.Director.push_back(tempDirector);
    getline(inFile, tempGenre, ',');
    movieInfo.Genre.push_back(tempGenre);
    getline(inFile, tempYear, ',');
    movieInfo.Year.push_back(tempYear);
    getline(inFile, tempTime);
    movieInfo.runningTime.push_back(tempTime);
}

我的错误是

"error C2039: 'Title': is not a member of     'std::vector<movie,std::allocator<_Ty>>'
1>        with
1>        [
1>            _Ty=movie
1>        ]"

,并且对所有push_back行重复此操作。

1 个答案:

答案 0 :(得分:2)

这不是结构的向量在C ++中的工作方式。如果向量类型是结构,则C ++不会为结构中的每个字段创建向量。正确的方法是:

for (int i = 0; i < 20; i++)
{
    string tempTitle, tempDirector, tempGenre, tempYear, tempTime;
    movie tempMovie = {};
    getline(inFile, tempTitle, ',');
    getline(inFile, tempDirector, ',');
    getline(inFile, tempGenre, ',');
    getline(inFile, tempYear, ',');
    getline(inFile, tempTime);
    tempMovie.Title = tempTitle;
    tempMovie.Director = tempDirector;
    // And so on...
    movieInfo.push_back(tempMovie); // Push the whole struct into the struct's vector
}

当然,还有其他方法可以处理插入部分,例如emplace_back。.