Bom galera estou fazendo uma matéria na faculdade que é estrutura de dados, e apesar de ja saber bastante de java ainda passo dificuldades em C++(linguagem utilizada nessa matéria, e minha dúvida é o seguinte.: Preciso utilizar leitura de arquivos de casos de teste, e conforme solicitado a nós era pra utilizar o fstream, até ai tudo bem fiz o include dessa classe e não deu erro, porém fica dizendo que não encontra as classes que deveriam ser usadas para leitura. Obs(no exemplo do professor ele também utilizou essas classes), estava pensando que poderia ser um problema mesmo de configuração do eclipse, bom segue meu trecho de código que não compila.
#include<Lista.h>#include<iostream>#include<fstream>intmain(intargc,char**argv){Listalista;// não entende o que é ifstreamifstreamfile(argv[1]);charline[256];file.getLine(file,256);while(!file.eof){stringstreamstream(line);styringcomando;intn;intposicao;stream>>comando;switch(comando){case"INSERIR":
Exemplo de erro: Type ‘ifstream’ could not be resolved., Type ‘stringstream’’ could not be resolved.
O que mais precisa pra utilizar essas classes?Aceito sugestões.
No início do programa, na linha anterior ao main (seria equivalente no java a declaração import).
Outra opção é dar o nome inteiro da classe, nesse caso, prefixando tudo com std::
Por exemplo, std::fstream.
O #include não é um import. É apenas uma diretriz que informa ao compilador que você quer acessar esse .h a partir desse arquivo. Esse tipo de diretriz não é necessária em Java.
(A rigor o #include age um pouco diferente. Ele faz literalmente um copy&paste do arquivo apontado para o local onde o #include foi dado).
F
Fellipex
Hum bem pensando Vini, não me toquei desse questio, aliás nas outras classes do projeto eu não utilizava o using namespace std, eu colocava direto no código por exemplo:
std::cout << “blablabla”,
Vou alterar para std::ifstream conforme você informou, em breve venho informar caso consiga compilar. Mas uma dúvida, ja li sobre namespace mas não entendi muito bem, ele define exatamente o que? O que seria o namespace(o que ele realmente faz no código)?
Att
V
ViniGodoy
O namespace é exatamente igual ao package do Java.
Ele divide a classe em diferentes pacotes, para que não haja confusão de nomes.
Assim, a classe std::vector pode ser completamente diferente da, digamos, math::vector
F
Fellipex
Perfeito, com relação ao erro de não resolver o tipo, entendi o motivo e consegui corrigir, porém está marcando erro nestre trecho
Lembrando estou me baseando no exemplo do professor portanto apesar de eu ter feito este código ainda tenho dificuldade em alguns trechos e na sintaxe de C++. No nosso caso utilizamos esta classe para ler arquivos automatizados de casos de testes, melhorando assim quem for testar não precisar executar todas as opções possíveis, deixando isso em mão de arquivos prontos que contém todas as opçoes. Alguma sugestão do erro citado no comentário? Alguma forma melhor?A sintaxe está errada?
Outra coisa, a classe styring, da linha debaixo, também não existe. Não era para ser String?
F
Fellipex
Hm ali pode ser realmente String que recebe o comando que está sendo lido, mas aquela do parâmetro fiquei confuso, pq ele fez assim mesmo passando a line(array de char) como parametro da stream. Vou verificar se posso ter anotado algo errado, em breve respondo aqui, grato.
E
entanglement
Fellipex:
Perfeito, com relação ao erro de não resolver o tipo, entendi o motivo e consegui corrigir, porém está marcando erro nestre trecho
Lembrando estou me baseando no exemplo do professor portanto apesar de eu ter feito este código ainda tenho dificuldade em alguns trechos e na sintaxe de C++. No nosso caso utilizamos esta classe para ler arquivos automatizados de casos de testes, melhorando assim quem for testar não precisar executar todas as opções possíveis, deixando isso em mão de arquivos prontos que contém todas as opçoes. Alguma sugestão do erro citado no comentário? Alguma forma melhor?A sintaxe está errada?
Se estiver usando o C++ da Microsoft, o help é um pouco ininteligível para várias classes (as que foram compradas pela Microsoft do pessoal da Dinkumware). Nesse caso é melhor olhar o help genérico que indiquei nesse site http://www.cplusplus.com ). O sr. P. J. Plauger pode ser um gênio, mas o help que o pessoal da empresa dele (acho que seja ele mesmo que tenha escrito o help, he he he) é terrível de se ler.
E
entanglement
#include<Lista.h>#include<iostream>#include<fstream>// Dicas:// a) Evite usar nomes muito vagos para variáveis. Não sei se "file" é um// arquivo de entrada ou de saída, por exemplo. Como você disse que é de entrada,// use "input" ou "inputFile". Eu prefiro "inputFile" porque talvez você queira// reservar "input" para os dados de entrada. // Outro caso: em vez de "stream" use "inputStrStream" ou coisa parecida. // b) Olhe a documentação das classes em http://www.cplusplus.com// c) Evite usar char* ou char[] a menos que estritamente necessário. No exemplo// abaixo, que ocorre se a linha tiver exatamente 256 caracteres? É o tipo// de coisa que vai te machucar tanto que ou você acaba ficando com a casca grossa,// ou então você acaba desistindo do C++. intmain(intargc,char**argv){Listalista;std::ifstreamfile(argv[1]);while(true){std::stringline;std::getline(file,line);// http://www.cplusplus.com/reference/string/getline/if(file.eof())break;std::stringstreaminputStrStream;// http://www.cplusplus.com/reference/iostream/stringstream/inputStrStream<<line;// isto preenche o stringstream com o conteúdo da stringintn;intposicao;std::stringcomando;stream>>comando;// infelizmente, o switch do C++ é mais simples que o do Java (não aceita strings, só int, unsigned int,// char ou unsigned char. Nem __int64 ele aceita)if(comando=="INSERIR"){...}elseif(comando==...
F
Fellipex
Valeu pelas dicas, na verdade não tenho muito experiência com C++, eu ja li algumas documentações no cpluscplus e tenho um guia de bolso da novatec, que achei muito interessante por sinal. Com relação ao tamanho definido para o char é porque como estamos nos primeiros “trabalhinhos” da disciplina era pra usarmos alocação estática, definindo um tamanho fixo tanto para a quantidade de caracteres dos elementos que serão colocados na lista quanto para o próprio tamanho da lista definido por uma constatante MAX_LISTA. Vou dar uma olhada no que você me passou para tentar dar uma melhorada no código.
Grato.
F
Fellipex
Bom lembrei de uma dúvida minha, que surgiu no ultimo trabalho, até o momento não consegui testar os casos de teste e necessito da ajuda de vocês. Por exemplo ali estou utilizando argv[1] para pegar o argumento de entrada, e tenho uma arquivo .in que tem alguns intruções a serem lidas pelo programa, eu ja vi em alguns lugares mas não consegui resolver meu problema, estou utilizando a IDE eclipse, dai vi em alguns lugares para colocar la no arguments, mas como fica tipo coloco Caso1.in simplesmente assim lá? e aonde eu coloco o arquivo de teste? Dentro da pasta debug? não achei muito bem explicado quando os argumentos são arquivos que contém strings de leitura e não simplesmente colocar as strings la no arguments. Alguem poderia me dar um caminho?