viciado 1 Denunciar post Postado Abril 11, 2009 1) Como funciona typedef em estruturas ? 2) Como posso gravar dados e acessar dados de uma estrutura dentro de outra ? Compartilhar este post Link para o post Compartilhar em outros sites
rafael.t.a 0 Denunciar post Postado Abril 12, 2009 typedef: Cria um novo tipo para variável.. Ex: typeded struct{ char nome[50]; int mat; }aluno; aluno é o novo tipo de variavel para gravar dados: int main(){ aluno variavel; variavel.nome = 'Jose'; variavel.mat = 1; } O acesso também é feito do mesmo modo. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 12, 2009 --- Título Editado Duvidas Struct http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Struct Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Abril 12, 2009 1) Como funciona typedef em estruturas ?Fala viciado, tudo certo? O typedef cria um sinonimo a um tipo de dados, seja uma estrutura ou seja um inteiro. A grande vantagem é que não precisamos usar a palavra-chave struct antes de usar um tipo de dados que criamos, o rafael.t.a ja deu um bom exemplo! 2) Como posso gravar dados e acessar dados de uma estrutura dentro de outra ? Vamos declarar duas estruturas: typedef struct { int dia, mes, ano; } data; typedef struct { int sexo; char *nome; data nascimento; } pessoa; Para acessar o dia que a "pessoa" nasceu é muito fácil: //quando temos: pessoa *eu; eu = (pessoa*)malloc(sizeof(pessoa)); eu->nascimento.dia = 10; //ou, quando temos: pessoa eu; eu.nascimento.dia = 10; Eram essas as suas dúvidas? abraços Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Abril 12, 2009 Desculpe, mais não sei utilizar estruturas muito bem. Estou tentando fazer uma agenda. Gostaria de gravar o endereco na estrutura agenda, só que para isso a deve acessar a estrutura dados_endereco onde tem as variáveis para gravar: rua, número e bairro. #include <stdio.h> #include <stdlib.h> typedef struct dados_endereco { char rua[30]; int num; char bairro[20]; }; typedef struct agenda { char nome[30]; float tel; char email[20]; dados_endereco endereco; }; void cadastrar(){ printf("Informe o nome \n"); scanf("%s",&agenda.nome); printf("Informe o telefone \n"); scanf("%f",&agenda.tel); printf("Informe o email \n"); scanf("%s",&agenda.email); int main() { int n; do { printf("\n\n Agenda \n "); printf("Digite uma opcao \n"); printf("(1) Cadastrar \n"); printf("(2) Pesquisar \n"); printf("(3) Sair \n"); scanf("%d",&n); } while (n != 1 || n!= 2 || n!= 3); switch(n){ case 1: cadastrar(); break; case 2: pesquisar(); break; case 3: exit(); break; } system("PAUSE"); return 0; } Desculpe, essa parte não entendi nada: pessoa *eu; eu = (pessoa*)malloc(sizeof(pessoa)); eu->nascimento.dia = 10; Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Abril 12, 2009 Aquela parte que você não entendeu, relaxa... é um pouco mais avançado. Vamos ao seu código: você tem uma estrutura, mas não nomeou nada para o typedef, mude as declarações para: typedef struct dados_endereco_ { char rua[30]; int num; char bairro[20]; } dados_endereco; typedef struct agenda_ { char nome[30]; float tel; char email[20]; dados_endereco endereco; } agenda;Agora estamos obedecendo as regras: typedef old_type new_type; você vai precisar criar variáveis do tipo agenda para manipular esses dados. por exemplo: agenda cadastrar(void); int main() { agenda minhaAgenda; //aqui nós nomeamos uma variável do tipo "agenda" minhaAgenda = cadastrar(); return 0; } agenda cadastrar(void) { agenda aa; printf("Informe o nome \n"); scanf("%s%*c", &aa.nome); printf("Informe o telefone \n"); scanf("%d%*c", &aa.tel); printf("Informe o email \n"); scanf("%s%*c", &aa.email); printf("Informe a rua \n"); scanf("%s%*c", &aa.endereco.rua); return aa; } Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Abril 12, 2009 O que é e pq usar: ("%s%*c") ??? A função agenda cadastrar é void pq retorna aa ? Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Abril 12, 2009 Leia esse tópico A função "cadastrar" que eu declarei não é void. Ela retorna uma estrutura "agenda" agenda cadastrar(void); //tipo_de_retorno nome_da_funcao(parametros);Acontece que ela não leva nada como parametro! Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Abril 14, 2009 Desculpe a insistencia é que desejo pretendo enteder bem para não ficar toda hora perguntando Pq eu preciso criar uma varialvel do tipo agenda que recebe a função cadastrar() ? não posso chamar direto na main a função ? Entendi a função cadastrar(), só que pq tem que retornar a variavel "aa" ? Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 15, 2009 depende como você esta usando a agenda.. se for agenda uma variavel global naum precisa retornar nd, vai depender de como você vai trabalhar.. vai postando ai.. []s Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Abril 15, 2009 Pq eu preciso criar uma varialvel do tipo agenda que recebe a função cadastrar() ? não posso chamar direto na main a função ?Como o quitZAUMMMM disse, isso depende de como você ta programando.O que acontece é que usar variáveis globais é uma má prática de programação. você não precisa, obrigatoriamente, seguir a minha linha de raciocínio. Mas você precisa de variáveis para controlar a coisa. Não se pode criar uma struct e tentar acessála diretamente, por exemplo: struct foo { int bar; }; int main() { foo = qualquer_coisa; return 0; } Entendi a função cadastrar(), só que pq tem que retornar a variavel "aa" ? imagina que é para atribuir um valor a um integer: int soma(int a, int b); { int tmp; tmp = a+b; return tmp; } int main() { int a; a = soma(2, 3); return 0; } O raciocínio é análogo para variáveis do tipo "agenda". A variável "minhaAgenda" tem que receber um valor que seja obrigatoriamente do tipo "agenda". Por isso retornamos um valor assim. Aconselho você a estudar mais sobre funções antes de partir para as estruturas de dados. A coisa começa a complicar um pouquinho mais pra frente e ese tipo de "conceito" faz falta. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 15, 2009 Se for um programa pequeno td bem as variaveis globais.. + EU como o victor disse tbm naum gosto de usar variaveis globais.. como mew professor dizia: "naum usa, senaum cai o dedo" =p []s Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Abril 15, 2009 Quit, acho que muito pelo contrário. Se for um programa pequeno, a variável não é necessária em vários locais diferentes. Então não existe porquê declarar uma variável global. Agora, dá uma olhada naquele diff de arquivos com threads que eu postei, a quantidade de variável global e extern que existe ali. Nese caso seria tosco ficar passando como argumento p/ tudo quanto é função e criando mais funções ainda p/ atualizar a lista de arquivos,por exemplo,que é o "filé real-time" da coisa. Lógico: é só fazendo um monte de códigos que você consegue prever o que vai facilitar tua vida. Comecei a escrever aquele diff direto com as variáveis globais. Todas as coisas que tive que reescrever foram relacionadas a mutexes (mudar posição, adicionar um,etc). Acho muito sem-noção professor falar isso de cair o dedo, que é ruim sem dar maiores explicações. O bom programador não evita construções da linguagem. Ele só sabe quando usá-las. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 16, 2009 é Isis lendo seu post tenho q concordar com você! + é q tbm sempre fui acostumado a programar sem variaveis globais qnd o programa é meio grandinho :s, e você sabe pra deixar vicios é complicado UFHDASU! []s Compartilhar este post Link para o post Compartilhar em outros sites
Carutcho 0 Denunciar post Postado Abril 16, 2009 Viciado, Enetendo o q você fala, e realmente não se grile em perguntar as coisas quando tiver dúvidas, eu falo isso pq tb estou aprendendo C e pegar as coisas prontas sem saber o real significado, faz você errar la na frente, o C e cheio de frescurinhas e detalhes, qualquer um q passe desapercebido, você ferra o programa. Se liga nessa sua dúvida aqui. pessoa *eu; eu = (pessoa*)malloc(sizeof(pessoa)); eu->nascimento.dia = 10; Quando você tem um operador "*" a frente de uma variável, significa q você está criando um ponteiro para ela.. O q é um ponteiro ? Ponteiro é um "apontador" para um endereço de memória. Enfim, quando você usa "pessoa *eu" , você ta dizendo q a variavel eu, é um ponteiro da struct "pessoa" que você criou la em cima. Quando você declara um ponteiro, ele ainda não reservou na memória do pc aquele espaço ainda, é apenas um ponteiro apontando para nada, por isso ele usa o "malloc" que poderia ser feito tb desta maneira aqui eu = malloc(sizeof *pessoa);O malloc, ele vai reservar memória no seu pc e retornar para o seu ponteiro, o endereço dessa memória que ele reservou. Nesse caso, ele está reservando memória suficiente para abrigar a sua struct, portanto você poderá peencer esses valores depois. Quando você trabalha com ponteiro de struct, você utiliza o "->" para referenciar ao elemento e quando você trabalha com a propria struct você utiliza o "." para referenciar o elemento. Se liga no detalhe eu->nascimento.dia = 10; A variável "eu" ela é um ponteiro da struct "pessoa" onde um dos elementos "nascimento" é uma struct, se você reparar na struct declarada la em cima , ele não declarou nascimento com um "*" na frente, portando quando ele isntancia, ele instancia a struct, então o elemento da struct "nascimento" ele utiliza o "." para referenciar a ele. typedef struct { int sexo; char *nome; data nascimento; } pessoa; Bem, espero q tenha ficado claro essa parte, e é legal você entender como as coisas funcionam , pq só assim você vai conseguir aprender a desenvolver o q tem na sua mente.. Dê uma estudada sobe Structs e ponteiros para você entender melhor sobre isso.. Ahh mais um detalhe, me corrijam se eu estiver errado por favor. Não sei exatamente se está programando em C ou C ++ Mas tem diferença entre 2 coisas, C++ tem umas facilidades que não tem em C.. #include <string.h> //C++ variavel.nome = 'Jose'; //C strcpy(variavel.name, "jose"); Absss Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Abril 16, 2009 Após o cadastro na pesquisa informa sempre "nome invalido". Não sei pq estou fazendo essa função pq não tem o que pesquisar vai ser sempre 1 cadastro. #include <stdio.h> #include <stdlib.h> typedef struct dados_endereco_ { char rua[30]; int num; char bairro[20]; }dados_endereco; typedef struct agenda_ { char nome[30]; float tel; char email[20]; dados_endereco endereco; }agenda; agenda cadastrar(void){ agenda aa; printf("Informe o nome \n"); scanf("%s",&aa.nome); printf("Informe o telefone \n"); scanf("%f",&aa.tel); printf("Informe o email \n"); scanf("%s",&aa.email); printf("Informe a rua \n"); scanf("%s",&aa.endereco.rua); printf("Informe o numero \n"); scanf("%d",&aa.endereco.num); printf("Informe o bairro \n"); scanf("%s",&aa.endereco.bairro); return aa; } agenda pesquisar(void){ agenda aa; char nome[30]; printf("Informe o nome \n"); fgets(nome, 30, stdin); if(nome == aa.nome){ printf("%s \n",aa.nome); printf("%f \n",aa.tel); printf("%s \n",aa.email); printf("%s \n",aa.endereco.rua); printf("%d \n",aa.endereco.num); } else { printf("Nome invalido \n"); } return aa; } int main() { int n; do{ printf("Informe opcao que deseja \n"); printf("(1) Cadastrar \n"); printf("(2) Pesquisar \n"); scanf("%d",&n); } while(n!= 1 && n!= 2); if(n==1){ agenda agenda_cadastra; agenda_cadastra = cadastrar(); } else { agenda agenda_pesquisa; agenda_pesquisa = pesquisar(); } printf("Pesquisa \n"); agenda agenda_pesquisa; agenda_pesquisa = pesquisar(); system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Abril 16, 2009 do{ printf("Informe opcao que deseja \n"); printf("(1) Cadastrar \n"); printf("(2) Pesquisar \n"); scanf("%d",&n); } while(n!= 1 && n!= 2); E se o usuário quiser interromper o programa? P/ falar a verdade não entendi o programa: você faz um loop pra um menu sem informar ao usuário que a opção está errada e faz o tratamento da opção fora do while... É um tanto óbvio porque dá sempre Nome inválido: agenda pesquisar(void){ agenda aa; char nome[30]; printf("Informe o nome \n"); fgets(nome, 30, stdin); if(nome == aa.nome){ printf("%s \n",aa.nome); printf("%f \n",aa.tel); printf("%s \n",aa.email); printf("%s \n",aa.endereco.rua); printf("%d \n",aa.endereco.num); } else { printf("Nome invalido \n"); } return aa; } Você tem algum dado em aa? Não. Quando você trabalha com ponteiro de struct, você utiliza o "->" para referenciar ao elemento e quando você trabalha com a propria struct você utiliza o "." para referenciar o elemento.Se liga no detalhe Na verdade você pode usar o '.' em ponteiro p/ struct. Basta fazer (*ST).membro. Ahh mais um detalhe, me corrijam se eu estiver errado por favor.Não sei exatamente se está programando em C ou C ++ Mas tem diferença entre 2 coisas, C++ tem umas facilidades que não tem em C.. #include <string.h> //C++ variavel.nome = 'Jose'; //C strcpy(variavel.name, "jose"); C também tem facilidades: Compartilhar este post Link para o post Compartilhar em outros sites
paulopatto 0 Denunciar post Postado Abril 17, 2009 Fala masters, tudo bem com vocês? E a expectativa para o feriado ein? Bem pessoal para evitar abrir um novo tópico vou utilizar este que tem uma dúvida quase que similar a minha. Para a disciplina de estrutura de dados estamos começañdo com pilhas e filas e solucionando um soluciona o outro automáticamente, e quanto a funcionalidade das estruturas ainda devo melhorar, meu problema é mais com sintaxe e funcionamento da linguagem. Bem para não escrever diverssas vezes durante a disciplina a estutura de fila eu quis fazer tudo separado e ai fodeu tudo, seguem os códigos: App.cpp Aqui contem o a função mains de minha aplicação e faz a ligação de todos os arquivos (funcionalidades). #include<iostream.h> //Entrada e saida de stream #include "fila.cpp" //Métodos Manipuladores de Fila #include "tfila.cpp" //Estrututa de dados da fila // Variavel GLOBAL TFila fila; float media(TFila *p){ float media = 0; if(!estaVazio(p)){ for(int i = p->primeiro; i < p->ultimo; i++){ media += p->mes[i]; } media /= p->ultimo; return media; } cout<<"\n[ERRO]: A lista está vazia!" <<endl; return NULL; } float toKelvin(float celsius){return celsius + 273.15;} bool menu(){ int opcao; float valor; cout<<"\nEscolha:"<<endl; cout<<"\t1) Retornar o topo da fila." <<endl; cout<<"\t2) Retornar o ultimo da fila." <<endl; cout<<"\t3) Inserir elemento." <<endl; cout<<"\t4) Excluir elemento." <<endl; cout<<"\t5) Verificar se existem elementos na fila." <<endl; cout<<"\t6) Verificar se cabem mais elementos na fila." <<endl; cout<<"\t7) Listar elementos da fila." <<endl; cout<<"\t8) Calcular Medias" <<endl; cout<<"\t0) Sair do aplicativo." <<endl; cin>>opcao; switch(opcao){ case 0: return false; break; case 1: cout <<retornaTopo(fila) <<endl; break; case 2: cout <<retornaUltimo(fila) <<endl; break; case 3: cout<<"Entre com o valor de deseja inserir:"; cin>>valor; inserir(valor, fila); cout<<endl; break; case 4: cout<<"Valor " <<excluir(fila) <<" excluido da fila." <<endl; break; case 5: if(estaVazio){cout<<"Nao existem elemntos na fila."<<endl;} else{cout<<"Existem elementos na fila"<<endl;} break; case 6: if(estaCheio){cout<<"Lista cheia."<<endl;} else{cout<<"Lista nao cheia"<<endl;} break; case 7: listar(); break; case 8: cout<<"Media em CELSIUS: "<<media(fila) <<endl; cout<<"Media em Kelvins: "<<toKelvin(media(fila)) <<endl; break; default: cout<<"Opcao invalida, tente uma de acordo com o menu." <<endl; break; } return true; } int main(void){ while(menu()){continue;} return 0; } tfila.cpp Contem o tipo estruturado, meio como se fosse só um encapsulador de tipo. #define MES 12 typedef struct TFila{ int primeiro; int ultimo; float mes[MES]; int limite = MES; }TFila; fila.cppContem os métodos de manipulação de filas #include <stdio.h> float retornaTopo(TFila *p){ // Isso só é possível pois assumimos que a TFila segue essa assinatura // Versão com operador ternário /** *<code>*/ (!estaVazio(p)) ? return p->primeiro : return NULL; /**</code> */ /// Verssão com IF /** *<code> *if(!eVazio){ * return p->primeiro; *} *return NULL; *</code> */ } float retornaUltimo(TFila *p){ // Veja retorna topo (!estaVazio(p)) ? return p->ultimo : return NULL; /** * Vesão com IF *<code> *if(!eVazio){return p->ultimo;} *return NULL; *</code> */ } void inserir(float elemento, TFila *p){ if(!estaCheio(p)){ p->mes[p->ultimo++] = (float)elemento; //DEBUG printf("\n[DEBUG MESSAGE]\tInserido Array[%d] = %f",p->ultimo, elemento); } else{printf("Erro! A Lista já está cheia, elemine alguns elementos.");} } float excluir(TFila *p){ if(!estaVazio(p)){ float elemento = p->mes[p->primeiro]; // Vou deslocar uma-a-um os elementos da fila ou seja é a frase: // "A fila anda." for(int i = p->primeiro; i < p->ultimo; i++){p->mes[i] = p->mes[i+1];} p->ultimo--; return elemento; } } bool estaCheio(TFila *p){(p->ultimo == (p->limite-1)) ? return true : return false;} bool estaVazio(TFila *p){(p->ultimo == p->primeiro) ? return true : return false;} void listar(TFila *p){ if(!estaVazio(p)){for(int i = p->primeiro; i < p->ultimo; i++){printf("\n%f",p->mes[i]);}} else{printf("[ERRO] Lista vazia.");} } Bem eu estou utilizando dois compiladores para tal um é o cygwin e o outro(apenas para ver se tava td ok antes de postar essa dúvida) DEV C++ Bem não vou postar todas as mensagens de erros pois são muitas mas posso resumir o seguinte: Toda vez que um método é chamado ele não consegue reconhecer o tipo TFila. Quando passa pelo operador ternário ele reclama do primeiro return. Ele informa que nas operações com TFila ele interpreta um p->ultimo como TFila e dá incompatíbilidade de tipos. em espero que eu tenha sido claro, para compilar com o cygwin eu uso: g++ app.cpp -o app.exe //Não adianta tentar com gcc app.cpp -o app.exe pois o código (conjunto da obra) segue o padrão C++ Já para o DEV C++ é o famoso ctrl+f9. Aguardo possíveis respostas e qualquer coisa se precisarem de mais dados postem ai. Grato. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 17, 2009 bom aki tbm deu bastante erro. + um warning aki q percebi foi: float retornaUltimo(TFila *p){ // Veja retorna topo (!estaVazio(p)) ? return p->ultimo : return NULL; /** * Vesão com IF *<code> *if(!eVazio){return p->ultimo;} *return NULL; *</code> */ } pra um tipo float você ta qrendo retornar um NULL ? Compartilhar este post Link para o post Compartilhar em outros sites
paulopatto 0 Denunciar post Postado Abril 17, 2009 Para o pessoal do Linux a saida do Cygwin é: C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\Exemplos>g++ app13.cpp -o app13.exe In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/backward/iostream.h:31, from app13.cpp:16: /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider u sing one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. In file included from app13.cpp:17: fila.cpp:12: error: `TFila' was not declared in this scope fila.cpp:12: error: `p' was not declared in this scope fila.cpp:12: error: expected `,' or `;' before '{' token fila.cpp:30: error: `TFila' was not declared in this scope fila.cpp:30: error: `p' was not declared in this scope fila.cpp:30: error: expected `,' or `;' before '{' token fila.cpp:42: error: `TFila' has not been declared fila.cpp:42: error: ISO C++ forbids declaration of `p' with no type fila.cpp: In function `void inserir(float, int*)': fila.cpp:43: error: `estaCheio' undeclared (first use this function) fila.cpp:43: error: (Each undeclared identifier is reported only once for each function it appears in.) fila.cpp:44: error: request for member `mes' in `*p', which is of non-class type `int' fila.cpp:44: error: request for member `ultimo' in `*p', which is of non-class type `int' fila.cpp:47: error: request for member `ultimo' in `*p', which is of non-class type `int' fila.cpp: At global scope: fila.cpp:51: error: `TFila' was not declared in this scope fila.cpp:51: error: `p' was not declared in this scope fila.cpp:51: error: expected `,' or `;' before '{' token fila.cpp:62: error: `bool estaCheio' used prior to declaration fila.cpp:62: error: `TFila' was not declared in this scope fila.cpp:62: error: `p' was not declared in this scope fila.cpp:62: error: expected `,' or `;' before '{' token fila.cpp:63: error: `TFila' was not declared in this scope fila.cpp:63: error: `p' was not declared in this scope fila.cpp:63: error: expected `,' or `;' before '{' token fila.cpp:64: error: variable or field `listar' declared void fila.cpp:64: error: `TFila' was not declared in this scope fila.cpp:64: error: `p' was not declared in this scope fila.cpp:64: error: expected `,' or `;' before '{' token In file included from app13.cpp:17: fila.cpp:67:2: warning: no newline at end of file In file included from app13.cpp:18: tfila.cpp:6: error: ISO C++ forbids initialization of member `limite' tfila.cpp:6: error: making `limite' static tfila.cpp:6: error: ISO C++ forbids in-class initialization of non-const static member `limite' In file included from app13.cpp:18: tfila.cpp:7:8: warning: no newline at end of file app13.cpp: In function `float media(TFila*)': app13.cpp:25: error: `estaVazio' cannot be used as a function app13.cpp:33: warning: converting to non-pointer type `float' from NULL app13.cpp: In function `bool menu()': app13.cpp:56: error: `retornaTopo' cannot be used as a function app13.cpp:59: error: `retornaUltimo' cannot be used as a function app13.cpp:63: error: cannot convert `TFila' to `int*' for argument `2' to `void inserir(float, int*)' app13.cpp:67: error: `excluir' cannot be used as a function app13.cpp:78: error: `listar' cannot be used as a function app13.cpp:81: error: cannot convert `TFila' to `TFila*' for argument `1' to `float media(TFila*)' app13.cpp:82: error: cannot convert `TFila' to `TFila*' for argument `1' to `float media(TFila*)' app13.cpp:94:2: warning: no newline at end of file Compartilhar este post Link para o post Compartilhar em outros sites