Если слова является vector<vector<string>>
то words[i][j]
получает доступ к string
. То, что вы можете посмотреть, это words[i][j] = tempWord;
. string
также имеет функцию .push_back()
, но принимает char
, поэтому ошибка, которую вы получаете, заключается в том, что вы не можете нажимать на строку, push_back()
для string
s для добавления символов в строку. Также в зависимости от того, как вы объявили words
, если вы не указали размеры, words[i][j]
может быть доступен за пределами допустимого диапазона, и лучший подход состоял бы в том, чтобы сделать words[i].push_back(tempWord)
. Также, глядя на ваши циклы for, я не уверен в ваших намерениях, какие слова из файла вы хотите, но в настоящее время как ваш код, он будет читать в первых 16 строках файла и помещать первое «слово» из каждого в ваш words
объект. Если ваше намерение состоит в том, чтобы иметь вектор векторов строки, где каждый подвектор - это слова в строке, то что-то вроде ниже может быть лучше.
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
int main(int argc, char* argv[])
{
std::string filename = "testfile.txt";
std::ifstream input(filename.c_str());
if(!input){
std::cerr << "Error in opening file: " << filename << "\n";
return 1;
}
std::vector<std::vector<std::string> > words;
std::string line;
while(std::getline(input, line)){
std::stringstream ss;
ss << line;
std::vector<std::string> row;
while (!ss.eof()) {
std::string tempStr;
ss >> tempStr;
row.push_back(tempStr);
}
words.push_back(row);
}
//... then do something with words here
return 0;
}
Может быть 'words [i] [j] = tempWord;'? – songyuanyao
Как вы объявили слова? –
Объявлен вектор> words; и передается ссылкой на функцию, которую я использую, чтобы попытаться прочитать некоторые слова. –
zettaucla