По сути, у меня есть 2 постоянные строковые переменные с именами текстовых файлов ввода/вывода и 2 функции, которые принимают эти строки в качестве параметра. Одна функция предназначена для чтения 1-го файла, а другая — для записи во 2-й файл.
Константы:
const string duom = "U2.txt";
const string rez = "rez.txt";
Одна из функций:
void fileWrite(const string fn,int kieknuvaziavo,int kiekpristate,string paskutinis)
{
ofstream fout(fn.c_str());
fout << kiekpristate << " " << kieknuvaziavo << " " << paskutinis;
fout.close();
}
Если бы я удалил .c_str()
из этой строки ofstream fout(fn.c_str());
, я бы получил эту ошибку:
no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(const string&)'|
Вот часть основной функции:
int main()
{
int kiekpristate = 0;
int kieknuvaziavo = 0;
string paskutinis;
fileWrite(rez,kieknuvaziavo,kiekpristate,paskutinis);
return 0;
}
Теперь, если бы я выбрал другой маршрут и вместо того, чтобы использовать параметры для пути к текстовому файлу, сам написал бы его в потоке, например так: ofstream fout("rez.txt");
Это сработало бы отлично. Мой вопрос: зачем мне нужна функция c_str()
всякий раз, когда я использую параметры функции для передачи этой переменной? Что делает эта функция? Разве fn
не равно "rez.txt"
?
"some text"
не являетсяstring
. Это строка в стиле c, которая представляет собой просто массив символов, - person NathanOliver   schedule 06.03.2017std::ifstream
/std::ofstream
, которые принимаютstd::string
, были добавлены в стандарт C++11 (ранее они принимали толькоchar*
). Вы компилируете с включенными функциями С++ 11? - person Algirdas Preidžius   schedule 06.03.2017-std=c++11
. - person Algirdas Preidžius   schedule 06.03.2017gcc --version
. - person πάντα ῥεῖ   schedule 06.03.2017-v
в настройки/компилятор/настройки компилятора/другие параметры компилятора. Запустите сборку. Версия есть где-то там в логе, найди. - person n. 1.8e9-where's-my-share m.   schedule 06.03.2017c_str()
? Почемуofstream fout("rez.txt")
не равноofstream fout(fn)
, гдеfn
равно"rez.txt"
. Я не понял, что мне там пытался сказать Натан Оливер, я только начинаю изучать C++ - person Arkadijus   schedule 06.03.2017gcc
. Перейдите в свои настройки Codeblocks / Setup / Whatever и посмотрите, какую командную строку он использует для запуска компилятора. CodeBlocks не является компилятором, он запускает компилятор, установленный на вашем компьютере, и ему необходимо знать полный путь запуска gcc.exe. - person PaulMcKenzie   schedule 06.03.2017-std=c++11
в параметры компилятора. Пробовал строить с -v и без него, журналы остаются совершенно одинаковыми --- это вообще не может быть правдой в этой вселенной. Вы, вероятно, смотрите не на журнал сборки, а на сообщения сборки (сюрприз, две разные вещи), - person n. 1.8e9-where's-my-share m.   schedule 06.03.2017c_str()
. Должен ли я забыть об этом сейчас или продолжать использовать его? Каковы шансы, что когда я буду сдавать экзамен по программированию, у проверяющего будет включена эта штука? - person Arkadijus   schedule 06.03.2017