Это список ошибок, которые у вас есть (за исключением отсутствующей фигурной скобки в конце, отсутствующие включают в себя [вы, вероятно, просто не опубликовали их?] И отсутствующие std::
[использование using namespace std;
- * 1003) * считается плохой практикой ]) и, в основном, как их исправить:
std::stod
анализирует и возвращает dobule
, но вы присваиваете результат int
.
size = std::stod(arg2);
вы, вероятно, намеревались использовать stoi
:
size = std::stoi(arg2);
VLA (массивы переменной длины), такие как
std::string arr[size];
являются не является частью стандарта C ++ . Вместо этого используйте
std::vector<std::string> arr(size);
При открытии файлового потока ваше намерение верно, но синтаксис неправильный
std::ifstream infile;
if (std::getline infile.open(file))
должно быть
std::ifstream infile(file);
if (infile)
Внутри if
у вас есть
int arr[size],val;
две неиспользованные переменные, другая VLA и, что наиболее важно, int arr[size]
будет shadow string arr[size]
.
Вот причина следующих ошибок:
std::getline(file, arr[i]);
Первый параметр file
- это std::string
, это должно быть явно infile
. Из-за переменной затенения второй параметр arr[i]
будет ссылаться на int arr[i]
. Переименуйте одну из них или просто удалите две неиспользуемые переменные (см. Последний пункт).
Всегда проверяйте, было ли чтение успешным. Если вы хотите прочитать максимум size
строк, используйте
for(int i = 0; i < size && std::getline(infile, arr[i]); i++);
Это приведет к завершению l oop, если getline
не получится по какой-то причине, например, когда файл имеет значение меньше size
строк.
Наконец, вы можете подумать о некоторой проверке. Например, проверьте, действительно ли заданы два параметра командной строки, и добавьте блок try-catch вокруг stoi
.
И просто упомяну это: изучать C ++, угадывая, не весело. На https://en.cppreference.com/w/ вы можете найти обширную информацию и множество примеров функций и классов, которые вы хотите использовать.