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>
int main(int argc, char** argv){
Lista lista;
// não entende o que é ifstream
ifstream file(argv[1]);
char line[256];
file.getLine(file, 256);
while(!file.eof){
stringstream stream(line);
styring comando;
int n;
int posicao;
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.
Aguardo resposta
Att. 
O ifstream está dentro do namespace std.
Por isso, você tem que fazer uma declaração como:
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).
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
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
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
int main(int argc, char** argv){
Lista lista;
std::ifstream file(argv[1]);
char line[256];
file.getline(line, 256);
while(!file.eof()){
//erro: variable ?std::stringstream stream? has initializer but incomplete type
std::stringstream stream(line);
std::styring comando;
int n;
int posicao;
stream >> comando;
switch (comando) {
case "INSERIR":
stream >> n;
for (int i = 0; i < n; i++) {
file.getLine(line, 256);
lista.adiciona(line);
}
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?
Att
Não existe construtor do StringStream que aceita um array de chars:
http://www.cplusplus.com/reference/iostream/stringstream/stringstream/
Outra coisa, a classe styring, da linha debaixo, também não existe. Não era para ser String?
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.
[quote=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
int main(int argc, char** argv){
Lista lista;
std::ifstream file(argv[1]);
char line[256];
file.getline(line, 256);
while(!file.eof()){
//erro: variable ?std::stringstream stream? has initializer but incomplete type
std::stringstream stream(line);
std::styring comando;
int n;
int posicao;
stream >> comando;
switch (comando) {
case "INSERIR":
stream >> n;
for (int i = 0; i < n; i++) {
file.getLine(line, 256);
lista.adiciona(line);
}
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?
Att[/quote]
Hum… precisa dar uma lidinha no help. Por exemplo, para a classe stringstream, veja aqui:
http://www.cplusplus.com/reference/iostream/stringstream/
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.
#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++.
int main(int argc, char** argv){
Lista lista;
std::ifstream file(argv[1]);
while (true) {
std::string line;
std::getline (file, line); // http://www.cplusplus.com/reference/string/getline/
if (file.eof())
break;
std::stringstream inputStrStream; // http://www.cplusplus.com/reference/iostream/stringstream/
inputStrStream << line; // isto preenche o stringstream com o conteúdo da string
int n;
int posicao;
std::string comando;
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") {
...
} else if (comando == ...
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.
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? 
Att