Member 14558341 Ответов: 4

Как прочитать файл в строку векторного типа


#include <iostream>
#include <iomanip>
#include <fstream>
#include <map>
#include <vector>
#include <string>
#include <sstream>

using namespace std;

int main() {
	
	string line;
	vector<string> def;
	map<string, string>;
	ifstream input;

	if (!input) {
		cout << "File not opened!";
		exit(1);
	}

	input.open("Data.CS.SFSU");

	while (!input.eof()) {
			
		getline(input, line, '|');
		def.pop_back(line);//too many arguments in a function call (red line on "line")
	}

	input.close();

	return 0;
}


Что я уже пробовал:

Я пробовал гуглить, но не смог найти решение, достаточно близкое к моей проблеме.

KarstenK

разве вы не использовали отладчик, что происходит???

4 Ответов

Рейтинг:
1

CPallini

Цитата:
защита.pop_back(line);//слишком много аргументов в вызове функции (красная линия на "line")
Правильный метод-это push_back, видеть вектор::push_back[^].
То pop_back метод используется для удаления последнего элемента vector.


Рейтинг:
1

k5054

Так и должно быть def.push_back(line). pop_back() удаляет последний элемент вектора. Видеть вектор::pop_back - ссылка на C++ [^]
Дополнительно map<string,string>; должно быть, генерируется ошибка компилятора, так как он ничего не объявляет.


Stefan_Lang

Любой оператор, выглядящий как некоторый тип и точка с запятой, будет интерпретироваться как прямое объявление,поэтому map<string, string>; является допустимым C++, хотя и не очень полезным.

k5054

Интересно - говорит g++ ошибка: объявление ничего не объявляет [-fpermissive]- лязг ОТО говорит предупреждение: декларация ничего не объявляет [-Wmissing-declarations] Я бы не назвал это прямой декларацией, хотя бы потому, что она не обеспечивает что-нибудь полезно вообще.

Stefan_Lang

Действительно интересно: Visual STudio полностью игнорирует его, даже с-wall !

TBH я всегда *думал*, что это синтаксис для прямого объявления шаблонного типа, но вы правы, online gdb также объявляет его ошибкой: https://www.onlinegdb.com/online_c++_компилятор

Рейтинг:
1

Rick York

Попробовать это :

int main()
{
    std::ifstream input;
    input.open( "Data.CS.SFSU" );

    std::string line;
    std::vector< std::string > def;

    while( ! input.eof() )
    {
        getline( input, line, '|' );
        def.push_back( line );
    }

    input.close();
    return 0;
}


Рейтинг:
0

Patrice T

Похоже, что ваш код имеет более чем 1 проблему:
Так должно быть лучше:

input.open("Data.CS.SFSU");      // 1 open file
if (!input) {                    // 2 check if failed
    cout << "File not opened!";
    exit(1);
}
input.open("Data.CS.SFSU");


Совет: Научитесь правильно делать отступы в вашем коде, это покажет его структуру и поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]