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

[C] Que raio de erros são estes?

Discussão em 'Programação' iniciada por Nausea, 14 de Dezembro de 2007. (Respostas: 11; Visualizações: 1447)

  1. Nausea

    Nausea Power Member

    1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

    1>C:\Visual Studio 2005\Projects\Pequeno exercico 2 - Cópia\Debug\Pequeno exercico 2.exe : fatal error LNK1120: 1 unresolved externals

    Alguém me sabe dizer qual o motivo de isto estar a acontecer?

    Se pudessem dar uma ajuda agradecia.
     
  2. Peter V5

    Peter V5 Folding Member

    Tenta ser mais especifico.
     
  3. c1t1z3n

    c1t1z3n Power Member

    isso não é a falta da main() no código?
     
  4. Nausea

    Nausea Power Member

    Código:
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct{
    int grau;
    float coef;
    }POL;
    
    typedef struct coeficientes{
    POL p[20];
    int num;
    }POLINOMIO;
    
    int graupolinomio(POLINOMIO polinomio);
    POLINOMIO somapoli(POLINOMIO a, POLINOMIO b);
    
    void main(void){
        int j;
        POLINOMIO a, b, c;
        
        
        scanf("%d", a.num);
        for(j=0, j<a.num, j++){
            printf("coef: ");
            scanf("%f", a.p[j].coef);
            printf("grau: ");
            scanf("%d", a.p[j].grau);
        }
    
        scanf("%d", b.num);
        for(j=0, j<b.num, j++){
            printf("coef: ");
            scanf("%f", b.p[j].coef);
            printf("grau: ");
            scanf("%d", b.p[j].grau);
        }
    
        c = somapoli(&a, &b);
        for(j=0, j<20, j++){
            printf("coef: %f", c.p[j].coef);
            printf("grau: %d",  c.p[j].grau);
            
        }
    }
    
    
    
    // alinea a)
    
    int graupolinomio(POLINOMIO polinomio){
        int maior=0,i, grau;
    
        for(i=0; i< a.num; i++){
            grau=polinomio.p[i].grau;
    
            if(grau>maior)
                maior=grau;
        }
        return maior;
    }
    
    // alinea b)
    
    POLINOMIO somapoli(POLINOMIO a, POLINOMIO b){
        int i, j, k=0, l=0;
        POLINOMIO vSoma;
    
        vSoma.num=0;
    
        for(i=0; i<a.num; i++){
            l=0;
            for(j=0; j<b.num; j++){
                if(a[i].grau==b[j].grau){
                    vSoma.p[k].grau=a.p[i].grau;
                    vSoma.p[k].coef=a.p[i].coef+b.p[j].coef;
    
                    k++;
                    vSoma.num++;
                    }
                else
                    l++;
            }
    
            if(l==b.num){
                vSoma[k]=a[i};
                k++;
                vSoma.num++;}
        }
        
        
        for(i=0; i<b.num; i++){
            l=0;
            for(j=0; j<a.num; j++){
                if(a.p[i].grau!=b.p[j].grau)
                    l++;
            }
    
            if(l==b.num){
                vSoma[k]=b[i];
                k++;
                vSoma.num++;}
        }
    }
    este é o meu código. É um exercicio pra programação e eu não sei onde está o erro.
     
    Última edição pelo moderador: 14 de Dezembro de 2007
  5. Cesaria

    Cesaria Power Member

    Cheira-me que o prob será a biblio conio.h, não?
     
  6. Nausea

    Nausea Power Member

    Acho que o prob é do vista não dá permições ao visual studio pra criar a file ou cena assim. O vista tem que se dar permissões a tudo e mais alguma coisa só que neste aspecto não sei como faço pra fazer com que o vista o permita criar os ficheiros necessários.
     
    Última edição: 14 de Dezembro de 2007
  7. Baderous

    Baderous Banido

    Na função somapoli estás a passar 2 structs POLINOMIO como parâmetros, no entanto quando a invocas na main, estás a passar o endereço das structs. Não pode ser. Para resolver isto tens 2 formas:
    - Na função main, retiras o & antes do 'a' e do 'b' na invocação da função somapoli
    - Ou então na definição da somapoli, em vez de passares as structs, passas os seus apontadores (versão mais eficiente)

    Vê lá se depois disto ainda aparecem mais erros. Se aparecerem diz.
     
  8. greatbunzinni

    greatbunzinni Power Member

    O erro indica que não consegue encontrar a função main. Olhando para o teu código, tu não tens nenhuma função main.

    Segundo as normas da linguagem de programação C, a função main só existe segundo duas formas. Elas são:

    int main(void)
    int main(int, char**)

    Tudo o resto não pode ser aceite por compiladores de C.

    Os compiladores da microsoft costumam violar as normas de tudo que aparece e por isso costumam aceitar o void main(). No entanto, na hipótese de teres metido a compilar o teu programa com uma maior exigência, esse erro básico pode ter sido apanhado. Será isso?
     
  9. Nausea

    Nausea Power Member

    Código:
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct{
    int grau;
    float coef;
    }POL;
    
    typedef struct coeficientes{
    POL p[20];
    int num;
    }POLINOMIO;
    
    int graupolinomio(POLINOMIO polinomio);
    POLINOMIO somapoli(POLINOMIO a, POLINOMIO b);
    
    int main(){
        int j;
        POLINOMIO a, b, c;
        
        
        scanf("%d", &a.num);
        for(j=0; j<a.num; j++){
            printf("coef: ");
            scanf("%f", &a.p[j].coef);
            printf("grau: ");
            scanf("%d", &a.p[j].grau);
        }
    
        scanf("%d", &b.num);
        for(j=0; j<b.num; j++){
            printf("coef: ");
            scanf("%f", &b.p[j].coef);
            printf("grau: ");
            scanf("%d", &b.p[j].grau);
        }
    
        c = somapoli(a, b);
        for(j=0; j<c.num; j++){
            printf("\ncoef: %.2f", c.p[j].coef);
            printf("\ngrau: %d",  c.p[j].grau);
            
        }
        getch();
    }
    
    
    
    // alinea a)
    
    int graupolinomio(POLINOMIO polinomio){
        int maior=0,i, grau;
    
        for(i=0; i< polinomio.num; i++){
            grau=polinomio.p[i].grau;
    
            if(grau>maior)
                maior=grau;
        }
        return maior;
    }
    
    // alinea b)
    
    POLINOMIO somapoli(POLINOMIO a, POLINOMIO b){
        int i, j, k=0, l=0;
        POLINOMIO vSoma;
    
        vSoma.num=0;
    
        for(i=0; i<a.num; i++){
            l=0;
            for(j=0; j<b.num; j++){
                if(a.p[i].grau==b.p[j].grau){
                    vSoma.p[k].grau=a.p[i].grau;
                    vSoma.p[k].coef=a.p[i].coef+b.p[j].coef;
    
                    k++;
                    vSoma.num++;
                    }
                else
                    l++;
            }
    
            if(l==b.num){
                vSoma.p[k]=a.p[i];
                k++;
                vSoma.num++;}
        }
        
        
        for(i=0; i<b.num; i++){
            l=0;
            for(j=0; j<a.num; j++){
                if(a.p[j].grau!=b.p[i].grau)
                    l++;
            }
    
            if(l==a.num){
                vSoma.p[k]=b.p[i];
                k++;
                vSoma.num++;}
        }
        return vSoma;
    }
    
    Já corrigi os erros que falaste mas mesmo assim não consigo compilar no visual studio. enquanto que no devc++ consigo mas tive que programar em c++ e o programa corre perfeitamente. O unico prob é que eu tenho que entregar o trabalho em .c

    quanto ao facto de usar o void main(void) o visual studio aceita mas pelos vistos não é correcto usa-lo. A minha prof é que ensinou assim.
     
    Última edição: 14 de Dezembro de 2007
  10. Baderous

    Baderous Banido

    Eu gravei o programa em .c e compilou. Não sei é se faz o que tu queres mas erros não dá!
     
  11. Nausea

    Nausea Power Member

    O programa faz o que eu quero está funcionar perfeitamente. O studio compila mas não me cria o ficheiro executavel, experimentei compilar agora com o studio e deu perfeitamente. Com o devc++ dá-me um erro manhoso, mas se eu criar um projecto em c++ já funciona.

    Eu tenho quase a certeza que o problema é do vista. Já instalei o sp1 e mais uma cena para o vista mas mesmo assim nada bah que stress!

    obrigado pela a ajuda Baderous.
     
  12. greatbunzinni

    greatbunzinni Power Member

    Pelos vistos não leste com atenção a minha mensagem pois voltaste a cair no mesmo problema. Tu substituiste um erro por outro. Tu substituiste void main(void) por int main(). Ora, int main() é legal em C++ mas não é em C. A tua professora devia ter-te ensinado que, na linguagem C, uma função do tipo:

    Código:
    tipo nome()
    
    declara que a função aceita um número variável de parâmetros. Ou seja, em C uma função declarada assim é identica à seguinte função em C++:
    Código:
    tipo nome(...)
    
    No dev-c++ o teu código já compila por três motivos. O primeiro é que usa um compliador de C++. O segundo é que o compilador que usa não é o aborto que são os compiladores da microsoft. O terceiro é que em C++ uma função tipo int main() equivale a uma função em C do tipo int main(void).



    Os compiladores da microsoft aceitam muita coisa que não tem pés nem cabeça e que não aparecem em lado nenhum nas normas das linguagens. Não é por nada que nenhum compilador da microsoft respeita as normas. Não cumprem as normas C89, C99 e nem a C++98. Só acho estranho como é que há ainda gente que perde tempo a usar esses abortos.
     

Partilhar esta Página