View Full Version : [C] Que raio de erros são estes?
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.
Peter V5 14-12-2007, 09:06 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.
isso não é a falta da main() no 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.
Cheira-me que o prob será a biblio conio.h, não?
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.
Baderous 14-12-2007, 13:53 #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++){ //não é vírgula, mas sim ponto e vírgula a separar os campos do for
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++){ //não é vírgula, mas sim ponto e vírgula a separar os campos do for
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++){ //a não está declarado
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.
greatbunzinni 14-12-2007, 13:56 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?
#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.
Baderous 14-12-2007, 14:41 Eu gravei o programa em .c e compilou. Não sei é se faz o que tu queres mas erros não dá!
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.
greatbunzinni 14-12-2007, 15:19 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:
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++:
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.
|
|