Estoy tratando de pasar una cadena de la función principal a otra. esta cadena es un nombre de archivo de texto que debe ser abierto. por lo que puedo ver, estoy pasando la cuerda bien, pero cuando trato de usar ifstream.open(textFileName)
, no funciona del todo. pero cuando lo codifico manualmente como ifstream.open("foo.txt")
, funciona bien. Yo tendría que utilizar esta función varias veces, así que me gustaría ser capaz de pasar de una cadena de nombre de archivo de texto ..C++: ifstream problema abierto al pasar una cadena para el nombre de archivo de texto
aquí es mi principal cabecera
#ifndef DATA_H
#define DATA_H
#include "Data.h"
#endif
#ifndef DATAREADER_H
#define DATAREADER_H
#include "DataReader.h"
#endif
using namespace std;
int main()
{
vector<Data*> database = DataReader("foo.txt");
return 0;
}
de DataReader
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#ifndef DATA_H
#define DATA_H
#include "Data.h"
#endif
using namespace std;
vector<Data*> DataReader(string textFile);
y finalmente el DataReader.cpp
#include "DataReader.h"
using namespace std;
vector<Data*> DataReader(string textFile)
{
ifstream aStream;
aStream.open(textFile); //line 11
busqué la ifstream.open() y se necesita una cadena y un modo como parámetros. no muy seguro de qué hacer con los modos, pero los probé pero dio el mismo mensaje de error
DataReader.cpp: In function 'std::vector<Data*, std::allocator<Data*> > DataReader(std::string)':
DataReader.cpp:11: error: no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::open(std::string&)'
/usr/local/lib/gcc/sparc-sun-solaris2.9/4.0.3/../../../../include/c++/4.0.3/fstream:495: note: candidates are: void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
gracias de antemano por cualquier entrada y/o sugerencias.
Dean
Encontrará mayor éxito en la vida si coloca sus guardias de inclusión * dentro * de los encabezados que deben proteger. Incluir un encabezado debe ser tan simple como una sola línea '# include', no cuatro líneas para incluirlo condicionalmente, donde se requiere que conozca el nombre del símbolo de guarda de cada encabezado. Las primeras dos líneas de cada encabezado serán '# ifndef' /' # define' y la última línea será '# endif'. Debería poder encontrar ejemplos de esto en * cada * encabezado que alguna vez veas. –