Я понимаю, что указатель на символ используется для создания строк в 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?
Это подпись открытого на 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, было бы меньше сообщений о переполнении стека …