Имеется программа, парсящая 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 должно представлять класс, структуру или объединение). Не могу понять, что вызывает эту ошибку.
Вроде бы у меня что-то близкое к этой проблеме, но все равно причина не очень ясна.
journal является вектором, а в строке journal.data.size() вы видимо ходите обратиться к элементу вектора, а не к вектору. Вам необходимо указать индекс элемента вектора, например так:
std::cout << journal[0].data.size() << std::endl;
Нужно сравнить два числа, количество цифр которых будет равняться вплоть до 10^6 (Тип данных записан как string)Какие помимо этого способа существуют...