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

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.
 
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.

Tenta ser mais especifico.
 
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:
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:
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++){  [COLOR=Red]//não é vírgula, mas sim ponto e vírgula a separar os campos do for[/COLOR]
        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++){ [COLOR=Red]//não é vírgula, mas sim ponto e vírgula a separar os campos do for[/COLOR]
        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++){  [COLOR=Red]//[b]a[/b] não está declarado[/COLOR]
        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.

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.
 
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?
 
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:
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.
 
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
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).



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.

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.
 
Back
Topo