Hachiman 0 Denunciar post Postado Novembro 28, 2005 Alguém me ajude, por favor! Não manjo quase nada de C++! Preciso construir um analisador léxico e estou com problemas para abrir arquivos .txt para leitura em C++ utilizando o ifstream! Eu consigo abrir o arquivo que desejo quando coloco o ifstream direto na main da seguinte forma: int main(void){ int token; char sToken[TOKEN_LENGTH]; //variável para indicar se os tokens são parte de comentário ou não bool comentario = false; int lineNumber = 1; // Abrir o arquivo fonte em modo binario ifstream sourceFile("programa.txt",ios::binary); // Extrair os tokens até EOF while ((token = getToken(sourceFile,sToken,lineNumber)) != EOF){ ........ ........ ........ sourceFile.close(); cout << endl; system("PAUSE"); return 0; } Utilizando o ifstream da forma como está destacado em vermelho consigo abrir e fechar o arquivo sem problemas, mas preciso fazer o analisador léxico utilizando um arquivo header com a struct abaixo: struct CompilerState{ ifstream *sourceFile; // Source code file int token; // Token numerical representation char sToken[TOKEN_LENGTH+1];// The token int lineCount; // Line counter char lineNumber[LINE_NUMBER_LENGTH];// Program line number int currentCommand; // Command just parsed int errorCount; // Compiler error counter }; //**************************************************************** int getToken(CompilerState&); O meu problema na linha em vermelho na struct. O professor definiu um ponteiro (ifstream *sourceFile). Como eu faço para utilizar este ponteiro para abrir o arquivo na main utilizando os parâmetros do ifstream para abertura de arquivos, neste caso"("programa.txt",ios::binary)"? Meu professor declarou o "ifstream *sourceFile;" na struct e não posso mais utilizá-lo declarado direto na main. valeu! Compartilhar este post Link para o post Compartilhar em outros sites
Homero C. de Almeida 0 Denunciar post Postado Novembro 29, 2005 Ora, você usa ele normalmente, mas na hora de criar um objeto da struct você vai ter que fazer:seuCompilerState.sourceFile = new ifstream("arquivo.txt", ios::binary);aí é só usar as funçoes normais, do ifstream, só que ao invés de usar "." para chamar métodos do objeto sourceFile, você usa o operador "->". Compartilhar este post Link para o post Compartilhar em outros sites