1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

fatal error LNK1105: cannot close file

Discussão em 'Programação' iniciada por Roger_martins, 27 de Março de 2008. (Respostas: 2; Visualizações: 646)

  1. este erro no visual studio em C significa o que?

    como o resolvo?




    ja agora, podiam-me dizer onde se coloca e como se faz um prototipo de uma funçao?


    obrigado desde ja!
     
  2. The_True_Eue

    The_True_Eue Power Member

    Bem, acho que ainda tens de aprender C...
    Recomendo uma visita à secção de bibliografia...

    Um protótipo podes por... bem, [quase] onde quiseres.
    Geralmente, colocam-se os protótipos todos antes da main(). (Bem, também podes colocá-los num header file, e depois tens d... esquece, para já, fica por antes da main(), ok?)
    O protótipo de uma função é nada mais nada menos que o cabeçalho dela. Por exemplo, o protótipo da função sqrt(), que calcula a raiz quadrada de um número é este:
    Código:
    double sqrt(double x);
    O nome do parâmetro aqui não era necessário, mas só ganhas em colocá-lo.
    Depois disso falta fazer a implementação dessa função, que é exactamente aquilo que tens vindo a fazer quando não usavas protótipos.
    Podes colocá-las em qualquer ponto depois dos respectivos protótipos. Eu geralmente coloco-as depois da main().
    A implementação da sqrt() deve ser algo assim (com código super rápido para calcular raizes quadradas lá dentro, é claro):
    Código:
    double sqrt(double x)
    {
        // Código da função.....
    }
    Isto parece bastante estúpido, repetir isto para quê?
    Mas é vantajoso pelas seguintes razões (e talvez outras que não me lembro agora...):
    Podes utilizar a função antes da implementação e não ocorrem erros. Por exemplo, o código seguinte não compila porque g ainda não foi definido:
    Código:
    int f()
    {
        return g() + g();
    }
    int g()
    {
        // Qualquer coisa aqui
    }
    
    Mas assim compila:
    Código:
    int f();
    int g();
    
    int f()
    {
        return g() + g();
    }
    int g()
    {
        // qq coisa..
    }
    
    Também podias mudar a ordem das funções. Mas assim, quando tivesses 30+ (bués) funções, tinhas de analisá-las para ver quais delas dependiam das outras, para as colocar na ordem correcta. Com protótipos, não interessa as dependências entre elas. Declaradas os protótipos todos no início e depois implementas as funções na ordem que quiseres.
    Também serve para, em casos extremos e bastante obscuros, escrever funções mutuamente recursivas:
    Código:
    int f(int a);
    int g(int b);
    
    int f(int a)
    {
        if(a == 1)
             return 1;
        else
             return g(a / 2);
    }
    int g(int b)
    {
         if(b == 1)
              return 1;
         else
              return f(3 * b + 1);
    }
    
    É algo rebuscado e provavelmente este exemplo nem faz nada de especial. Mas não interessa.

    Quanto ao erro.... Talvez isto ajude.
     
  3. obrigado mas descobri o problema, eu tinha as estruturas num citio errado logo os prototipos nao funcionavam
     

Partilhar esta Página