J'essaie de passer une chaîne de main à une autre fonction. cette chaîne est un nom de fichier texte qui doit être affiné. pour autant que je peux voir, je passe la chaîne bien, mais quand j'essaie d'utiliser ifstream.open(textFileName)
, ça ne marche pas tout à fait. mais quand je le code manuellement comme ifstream.open("foo.txt")
, cela fonctionne très bien. je aurais besoin d'utiliser cette fonction plusieurs fois donc je voudrais être en mesure de passer dans une chaîne de nom de fichier texte ..C++: problème ifstream ouvert avec le passage d'une chaîne pour le nom de fichier texte
ici est mon principal
#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;
}
tête 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);
et enfin le DataReader.cpp
#include "DataReader.h"
using namespace std;
vector<Data*> DataReader(string textFile)
{
ifstream aStream;
aStream.open(textFile); //line 11
i regardé le ifstream.open() et il faut chaîne et un mode en tant que paramètres. pas vraiment sûr de ce qu'il faut faire avec les modes, mais je les ai essayé, mais ils ont donné le même message d'erreur
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>]
vous remercie d'avance pour toute entrée/suggestions.
Dean
Vous trouverez plus de succès dans la vie si vous mettez vos protections d'inclusion * à l'intérieur * des en-têtes qu'ils doivent protéger. Inclure un en-tête devrait être aussi simple qu'une seule ligne '# include', pas quatre lignes pour l'inclure conditionnellement, où vous devez connaître le nom du symbole de garde de chaque en-tête. Les deux premières lignes de chaque en-tête seront '# ifndef' /' # define' et la dernière ligne sera '# endif'. Vous devriez être capable de trouver des exemples de ceci dans * chaque * entête que vous voyez. –