Ir para conteúdo
Fórum Script Brasil

Maligno

Membros
  • Total de itens

    214
  • Registro em

  • Última visita

Tudo que Maligno postou

  1. Maligno

    trabalho em C++

    Se esforce para resolver um destes problemas, pois os demais são muito parecidos. Quando tiver código pronto e algum problema e/ou dúvida concreta referente ao código, volte ao tópico.
  2. Maligno

    Ajuda em programa C

    Ok. Não é coisa difícil. Seguindo os ítens: 1) O protótipo de strcpy() é char *strcpy(char *target, char *source). No seu caso, para a primeira atribuição será strcpy("São Leopoldo",cidade[0].nomeCid). 3) O protótipo de malloc() é void *malloc(size_t size). No seu caso, você precisa forçar um cast para o tipo que será armazenado na memória alocada. Então, você deve usar (dadosCid *)malloc(sizeof(dadosCid)). Uma informação adicional: o tipo size_t é traduzido para unsigned int pelo header "stddef.h", padrão em qualquer compilador, que o inclui automaticamente.
  3. Acontece que ao invocar MessageBox(), esta chamada é trocada ou por MessageBoxW(), feita para manipular wide strings ou por MessageBoxA(), que é feita para strings ASCII comuns. Isso ocorre porque o compilador tem um header (nesse caso o winuser.h) que faz a troca de MessageBox() pela função apropriada, conforme se queira ou não usar UNICODE. Não uso o VS2008, mas acredito que você precisa configuar alguma variável de compilação para usar strings ASCII ou para desligar o UNICODE, que seja. Se não encontrar como fazer isso, uma alternativa rápida é chamar MessageBoxA() diretamente. Mas se não mudar isso na compilação, você terá problema em outras chamadas de funções que manipulam strings. E são várias.
  4. Absolutamente. Se fosse redundante o recurso não existiria. Imagine a cena: você instancia a classe e o construtor é executado. Nele, uma porção de memória é alocada. Como se faria a liberação automática dessa memória, senão no destrutor? Aliás, a principal função do destrutor é exatamente essa: limpar o "rastro" do objeto. Você insere o código pertinente à essa função nele e mantém a classe trabalhando apenas no que realmente interessa. Ajuda demais na organização. Esqueci de comentar isso. Realmente, finado o escopo das variáveis, estas são automaticamente destruídas. Mas isso não vale para memória alocada. Pra "matar" isso e devolver a memória, só mesmo com uma liberação explícita. Tarefa feita no destrutor, normalmente.
  5. Eu mesmo nunca usei essa classe na vida. Mas quando você comentou que o erro persistia mesmo com o nome certo, meu alarme tocou. Fui pesquisar a classe e confirmei minha suspeita. Mas isso é prática. Com o tempo pega-se o jeito. :)
  6. Após o erro você precisa limpar o estado anterior. Faça isso pelo método clear(). Faça a limpeza já na entrada da malha, antes do primeiro "cout". Fica mais fácil.
  7. Maligno

    Ajuda em programa C

    Visualmente, dá pra perceber diversos erros. 1) Logo de cara dá pra perceber um erro na atribuição dos nomes das cidades aos elementos do vetor. Você faz atribuição direta, o que não é permitido. Para atribuir uma string à uma variável char, você deve fazer uso da função strcpy(). Veja o help desta função. E acrescente o cabeçalho "string.h". 2) Em atribui() você tem um retorno, mas esta função deve retornar void, conforme diz seu protótipo. 3) Todos as chamadas de malloc() contém erro. Note que malloc() retorna um ponteiro para void, mas você precisa atribuir à variável um ponteiro para "dadosCid". 4) A estrutura dadosCid tem um elemento chamado numCid, mas você está em vários lugares errou o nome. Usou "num". Distração sua. 5) Na cidade "Campo Bom" o elemento "ligs" não tem atribuição alguma. Você esqueceu dele. Acho que é só. :)
  8. Não tem nada de errado com o seu cast. Que versão de Turbo C++ você está usando? Se for a versão 3.x (DOS), pode esquecer. Ela é de 1992; anterior à norma 14882-1998, quando o recurso "dynamic_cast" foi incluído à linguagem (capítulo 5, seção 2.7). Use outro compilador. Recomendo o BCC v5.5.1. É grátis e funciona bem, na maior parte dos casos. Download aqui.
  9. exatamente. O construtor é chamado automaticamente ao instanciar a classe. Se as variáveis são externas à classe você pode usá-las do jeito que quiser. Mas se estas forem propriedades da classe, elas só existem dentro do escopo do objeto. Ou seja, enquanto ele existir.
  10. Maligno

    Ponteiro duvidas

    Claro que não. A malha está do mesmo jeito. Quando você escrever uma malha desse tipo, observe qual o fluxo dos dados. Perceba como o ponteiro vai andar. Vou dar uma ajudinha. Seu iterador começa em zero. Deveria começar no final e não no começo. E se vai inverter, é natural que o iterador seja decrementado e não incrementado, como está agora. Sendo assim, quando a malha acaba? Quando o iterador for menor que zero. E outra: você não precisa mexer no valor do ponteiro, já que está usando um iterador. Use o ponteiro apenas para acessar o caractere.
  11. Observe o seguinte. O compilador precisa saber como ele vai acessar os elementos de uma matriz. Portanto, você precisa informá-lo qual a geometria dessa matriz. Se nem você sabe qual será o tamanho dessa matriz, então arrume outro jeito de armazenar os valores. Matriz nXn, com um valor n incerto e não sabido não vai dar pé. Uma alternativa é você usar uma lista ligada.
  12. Maligno

    Ponteiro duvidas

    p = &str está errado. Nem deve compilar. str já é um ponteiro. Você deve apenas copiar str para p. Ponteiro para ponteiro. O programa trava porque o loop vai ao infinito, já que i começa com 0 e vai sendo incrementado. Seu iterador i é inicializado de forma errada. Você não quer imprimir invertido? Então troque a malha inicializando com i=tam, troque o teste por i>=0 e ajuste o iterador com i--. Na impressão também tem erro. Não use %s, que é para string. Use %c (caractere), indicando o conteúdo do ponteiro com *(p+i).
  13. Como assim varia de tamanho? É uma matriz dinâmica? Se for, você precisará alocar memória, conforme a necessidade. Poste o código, pois sem ver o que você está fazendo eu só posso ficar na suposição. Mas poste dentro das tags de código, senão nem dá pra ler.
  14. As formas double matriz[dim1][dim2] e double matriz[][dim2] (melhor) vão funcionar corretamente. E você, claro, poderá acessar todos os elementos.
  15. A regra é clara: matriz multidimensional precisa ter limites para todas as dimensões, exceto a primeira. Não. Você não pode retornar uma matriz. Muito menos multidimensional com o erro acima. :)
  16. Maligno

    Ponteiro duvidas

    Depois de adicionar ao ponteiro o total de bytes da string, ele apontará para o último elemento da string. Numa malha for() vá decrementando o ponteiro para acessar os elementos anteriores.
  17. Maligno

    Ponteiro duvidas

    Não se reserva palavra por header. Acabei de testar aqui e seu código não tem erro algum. Acessando o conteúdo inversamente. Veja qual o tamanho da string, some o valor ao ponteiro e vá voltando numa malha.
  18. Maligno

    Ponteiro duvidas

    Agora não vejo erro algum. Qual o problema? Erro de compilação? Se sim, onde? Ou é erro de execução?
  19. Maligno

    Ponteiro duvidas

    1) Não está faltando nada na declaração das quatro funções dos cálculos? 2) Você está persistindo no erro da divisão. Esqueceu do cast. Revise.
  20. Maligno

    Ponteiro duvidas

    Nem poderia ser diferente. Você quer exibir um inteiro como float sem fazer o devido cast. Troque a divisão por printf("Divisao: %f \n",(float)*p1 / (float)*p2);. Note que você até poderia fazer o cast apenas no resultado, mas daí você só veria a parte inteira do cálculo.
  21. Maligno

    Ponteiro duvidas

    Nesse canf() você passa a referência de uma variável. Isso significa que scanf poderá modificar a variável original. A aritmética de ponteiros existe para acessar elementos diretamente pela sua posição. Não faz sentido, portanto, somar ponteiros pura e simplesmente. Faria sentido sim, somar os conteúdos de dois ponteiros. Exemplo: *ptr1 + *ptr2. Se você tem uma variável ponteiro, apenas informe seu nome como argumento da função chamada, desde que esta, em seu protótipo, exiga um ponteiro, claro. Exemplo: foo(ptr1). Mas lembre-se de que você também pode passar uma variável por referência, conforme o exemplo de scanf(), acima. Para retornar um ponteiro, se o protótipo desta função assim definir, apenas retorne o nome da variável em questão. Exemplo: return ptr1.
  22. Maligno

    Ajuda - Função Getch

    Cara, eu já ouvi cada uma que você nem ia acreditar. Por isso realmente pensei que você queria o número "normal", como conhecemos. Mas, desfeita a confusão, toca pra frente. ;-)
  23. Maligno

    Problema com o NULL (C)

    O que está acontecendo é um erro muito esquisito. O NULL é uma macro que é expandida pelo compilador. Ela deve estar definida no seu "windef.h", que deveria ser carregado por default. Logo, se está dando esse problema, inclua esse cabeçalho explicitamente. De qualquer forma, nem acho necessário usar NULL. Uma vez que fig pode ou não conter um valor nulo e já que NULL é expandido pra zero, basta você testar (!fig), que terá o mesmo efeito que o teste (fig != NULL). E ainda economiza na digitação. :) Em tempo e apenas para efeito de informação: em C++, NULL é expandido para zero. Em C, NULL é expandido para (void*)0.
×
×
  • Criar Novo...