PDA

Visualizza la versione completa : [C/C++] Errore "undefined reference" compilando sorgente in Eclipse


eclips
21-05-2006, 13:38
ciao,
finalmente ho fatto il mio primo built, con questo risultato:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):: undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status
make: *** [prova1.exe] Error 1
make: Target `all' not remade because of errors.


:oVVoVe: :oVVoVe: :oVVoVe: ma che roba è? come si risolve?


il codice è il seguente:



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct nodo{
int inf;
struct nodo *punt_succ;
};

struct nodo *pt_testa=NULL;
struct nodo *pt_coda=NULL;

void push_coda(int quantita){

struct nodo *nuovo=(struct nodo*)malloc(sizeof(struct nodo*));

(*nuovo).inf=quantita;
(*nuovo).punt_succ=NULL;

if(pt_testa==NULL)
pt_testa=pt_coda=nuovo;
else
{
(*pt_coda).punt_succ=nuovo;
pt_coda=nuovo;
}
}

void visualizza()
{
struct nodo *app;
app=pt_testa;
while(app!=NULL)
{
printf("nodo:> %d \n",(*app).inf);
app=(*app).punt_succ;
}
}

int main(int scelta){

int quantita;
printf("1) Inserisci\n2) Visualizza\n0) per uscire\n\n:>>");
scanf("%d",&scelta);

if(scelta!=0){
switch(scelta){
case 1:
printf("\nDammi l'informazione:> ");
scanf("%d \n",& quantita);
push_coda(quantita);
break;
case 2:
visualizza();
break;
}
return main(scelta);
}
else{
system("PAUSE");
return 0;
}
}

alka
21-05-2006, 16:30
Ho corretto il titolo della discussione sostituendolo con uno maggiormente significativo.

Cerca di usare titoli meno generici in futuro. :)

Ciao! :ciauz:

andbin
21-05-2006, 21:04
Originariamente inviato da eclips
ciao,
finalmente ho fatto il mio primo built, con questo risultato:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):: undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status
make: *** [prova1.exe] Error 1
make: Target `all' not remade because of errors.


:oVVoVe: :oVVoVe: :oVVoVe: ma che roba è? come si risolve?L'entry point WinMain viene usato nelle applicazioni Win32 GUI (grafiche). Mi sembra invece che il tuo obiettivo sia quello di realizzare una applicazione "console".
In pratica hai solamente sbagliato a creare il progetto. Giusto per chiarire subito ... io non conosco Eclipse, ma credo che quando vai a creare un nuovo progetto ti chieda che tipo di progetto vuoi realizzare. Bene, dovresti vedere se c'è un tipo di progetto "console" o "Win32 console" o comunque qualcosa di simile.

Desidero inoltre segnalarti alcune cose, a livello di linguaggio "C", che potrebbero esserti sicuramente utili (credimi!!!):

a) Quando posti il codice, per cortesia, postalo indentato correttamente (4 spazi per l'indentazione). ;)

b) Vedo che fai in certi punti: (*nuovo).inf. Bene, sappi che è molto più preferibile usare la sintassi nuovo->inf che è esattamente la stessa cosa.

c) La dichiarazione della funzione main è sbagliata. Hai messo: int main(int scelta). La funzione main() la puoi dichiarare tipicamente in 2 modi:
int main (void)
oppure
int main (int argc, char *argv[])

Usi il primo modo se non hai bisogno dei parametri della linea di comando, usi il secondo modo se invece hai bisogno dei parametri della linea di comando.

d) Nel main fai un return main(scelta);. È una pessima soluzione, primo per il motivo del punto c) appena detto, secondo perché è un modo di operare scadente.

Spero naturalmente di esserti stato di aiuto. :ciauz:

eclips
21-05-2006, 23:54
Prima di tutto grazie per avermi risposto e anche per i consigli :D :D :D . Neanche io non conosco bene ECLIPSE, quello è il mio primo codice in C con ECLIPSE. L’indentazione l’avevo messo ma non la presa, probabilmente perché non ho messo i 4 spazzi. Anche se quell’altra forma è più elegante…., io preferisco di più gli asterischi (e nemeno variabili globali non sono visti di buon'occhio da alcuni standard). Per quanto riguarda il main, lo so è un mostruosità, ma l’ho presa come scorciatoia :master: , comunque…. Il mio obiettivo è quello di realizzare una applicazione "console" più precisamente creazione e visualizzazione di un lista di interi (in realtà il codice + o – funziona in devc++).
Non penso di aver sbagliato il tipo di progetto, ECLIPSE è molto diverso dagli altri ambienti(devC++, borland…), non è possibile fare questo tipo di errore, io penso piuttosto che la colpa sia del compilatore. Io utilizzo il “Cygwin”, mi sono scordato di metterlo prima. Non so niente di questo compilatore è la prima volta che lo utilizzo, per cui boh ????
Tu lo conosci ? ah gia il mio SO è l’XP. Ha qualche problema con l’XP? :confused:
:ciauz:

Loading