Почему моя программа не распознает переменные из моей структуры? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь создать цикл на основе диапазона, чтобы заполнить вектор структуры для лаборатории в одном из моих классов. Проблема в том, что когда я пишу что-то вроде

"movieInfo.Title.push_back(tempTitle);" 

он не распознает, что «Заголовок» является строкой в ​​структуре «фильм».

Я уже пытался использовать "emplace_back" и пытался заполнить вектор напрямую. Подсказка лаборатории заключается в изменении векторной лаборатории той же темы, но с векторами структур.

Моя структура выглядит следующим образом

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

и определяется в основном как

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 Ответ

2 голосов
/ 06 мая 2019

Это не так, как векторы структур работают в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...