ошибка компиляции C2228 в std::vector

213
11 февраля 2018, 00:45

Имеется программа, парсящая csv файл:

#include <iostream>
#include <ctime>
#include <vector>
#include <string>
#include <sstream>
#include <fstream>
struct JournalEntry {
    tm time;
    std::vector<std::string> data;
};

int main() {
    std::ifstream file("file.csv");
    std::vector<JournalEntry> journal;
    std::string buf;
    //skip 1st line
    std::string rawLine;
    std::getline(file, rawLine);
    while (std::getline(file, rawLine)) {
        JournalEntry je;
        std::stringstream ss(rawLine);
        while (std::getline(ss, buf, ',')) {
            je.data.push_back(buf);
        }
        journal.push_back(je);
    }
    std::cout << journal.size() << std::endl;
    std::cout << journal.data.size() << std::endl;
    return 0;
}

Все парсится хорошо и укладывается в структуру, но когда я вызываю journal.data.size(), получаю ошибку компиляции C2228 (выражение слева от .size должно представлять класс, структуру или объединение). Не могу понять, что вызывает эту ошибку.

Вроде бы у меня что-то близкое к этой проблеме, но все равно причина не очень ясна.

Answer 1

journal является вектором, а в строке journal.data.size() вы видимо ходите обратиться к элементу вектора, а не к вектору. Вам необходимо указать индекс элемента вектора, например так:

std::cout << journal[0].data.size() << std::endl;
READ ALSO
Qt.Как создать модульное приложение?

Qt.Как создать модульное приложение?

Как создать модульную структуру проекта, как на рисунке :

237
C++: Преобразование текущего символа string в int

C++: Преобразование текущего символа string в int

Нужно сравнить два числа, количество цифр которых будет равняться вплоть до 10^6 (Тип данных записан как string)Какие помимо этого способа существуют...

279