J'essaie actuellement d'initialiser une variable istream privée en classe. La définition de classe ressemble à:Initialisation d'un membre de données istream privé en C++
#define PARSER_H
class parser {
public:
parser();
parser(string predict_table_file_name);
private:
int getMaxRHS(string predict_table_file_name);
int getMaxPairs(string predict_table_file_name);
int getMaxPairsY(string predict_table_file_name);
int getMaxRHSY(string predict_table_file_name);
int getMaxSymbols(string predict_table_file_name);
int getGoalSymbol(string predict_table_file_name);
int getNumberOfTerminalSymbols(string predict_table_file_name);
string getSymbol(int symbolID);
string getToken();
string openFile(string sourceFile);
bool isTerminalSymbol(string token, string symbolArray[], int terminalSymbols);
istream scanFile;
};
#endif
La variable en question est "istream Scanfile". Le code que j'utilise pour essayer de l'initialiser ressemble à ceci.
string parser::openFile(string sourceFile) {
filebuf fb;
fb.open(sourceFile.c_str(), ios::in);
parser::scanFile(&fb);
}
La ligne "analyseur :: Scanfile (& fb);" me donne le problème. Apparemment, le compilateur pense que j'essaie d'appeler la fonction, ce que je suppose, mais je veux juste appeler le constructeur sur parser :: scanFile. Je suis nouveau en C++, donc toute aide serait grandement appréciée.
Je pense que vous n'avez pas besoin de stocker istream dans votre classe du tout. Vous voulez probablement stocker les résultats de l'analyse pas les données source (que le membre scanFile est). Vous devriez avoir une méthode appelée parseData (istream & in) qui analyse les données et enregistre les résultats dans la structure ou les variables dont vous avez besoin. Si vous avez besoin de stocker les données source de l'analyseur, pourquoi ne pas les lire dans un tampon (par exemple std :: string) - vous pouvez alors stocker le tampon au lieu du flux d'entrée. – Wacek