Почему я получаю сообщение об ошибке при передаче строки в качестве имени файла, но не символа *?

Я понимаю, что указатель на символ используется для создания строк в C (с нулевым терминатором). Но я не понимаю, почему я получаю ошибку в C ++ для передачи строки в качестве имени файла, но это работает для char*,

Сигнатуры функций h prototype и cpp совпали для обоих сценариев.

Я включил отрывок кода и все включения, которые у меня есть для этого «служебного» файла (в нем есть несколько других функций, кроме функций чтения и записи).

//from the header includes

#include <string>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <limits>
#include <cctype>
#include <cstdlib>//from the cpp file//this one throws and error!
void readFiles(string fileName1)
{

ifstream file1;
file1.open(fileName1);

//to do implement read...

}

//This one works
void readFiles(char* fileName1)
{

ifstream file1;
file1.open(fileName1);
//to do implement read...

}

Я получаю ошибку:

нет подходящей функции для std :: basic_ofstream :: open (std :: string&)

Я также попытался передать по ссылке и указателю на строку.
Это из-за того, что имя файла читается только как массив символов, некоторые зависают от C?

-1

Решение

Это подпись открытого на ifstream: —

void open (const char* filename,  ios_base::openmode mode = ios_base::in);

Таким образом, передаваемая строка не будет работать.

Ты можешь сделать

std::string str("xyz.txt");
readFile( str.c_str() )

Однако в C ++ 11 есть две перегрузки:

void open (const string& filename,  ios_base::openmode mode = ios_base::in);
void open (const   char* filename,  ios_base::openmode mode = ios_base::in);

Если бы вы работали с C ++ 11, было бы меньше сообщений о переполнении стека …

4

Другие решения


По вопросам рекламы [email protected]