Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Algoritmi e strutture dati
 
Problema con dev c++
Clicca QUI per vedere il messaggio nel forum
hyperion
ciao a tutti...utilizzando dev-c++ non riesco a compilare correttamente i seguenti sorgenti,mi dice che ho più di un main definito ma non capisco perchè ne ho solo uno!
Riporto l'errore che dev c++ mi da quando provo a compilare test.c con le seguenti opzioni : test.c stack.c
multiple definition of main
first defined here
..
..
suggerimenti?grazie mille..


Header file (stack.h)

PHP:

#ifndef STACK_H
#define STACK_H

void push( int n);
int pop();
int top(void);
int is_empty(void);
void make_empty(void);
void stampa(void);

#endif





Sorgente per l'header (stack.c)

PHP:

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

#include &quot;stack.h&quot;

struct nodo{
int dato;
int h;
struct nodo *next;
};

int cont,h;
typedef struct nodo nodo;
nodo *testa = NULL;
nodo *tmp = NULL;


void push( int n){
    struct nodo *nuovo;
    nuovo = malloc(sizeof(struct nodo));
    if(nuovo == NULL) exit(0);
    nuovo -> dato = n;
    nuovo -> next = testa;    
    testa = nuovo;
}

int pop(void){
    tmp = testa;
    h = tmp->dato;
    testa = testa->next;
    return h;
}

int top(void){
    return testa->dato;
}

int is_empty(void){
    if(testa == NULL) return 1;
    else return 0;
}

void make_empty(void){
    while(is_empty()== 1)
        pop();
}

void stampa(void){
    tmp=testa;
    while(tmp !=NULL){
        printf(&quot;| %d |\n&quot;,tmp->dato);
        printf(&quot;|---|\n&quot;);
        tmp=tmp->next;
        }
}




Client di test (test.c)
PHP:

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

#include &quot;stack.h&quot;

int main (){
    char c;
    int n,tmp;
    while( ( c = getchar ()) != 'f' ){

        switch(c){
            case '1': 
                scanf(&quot;%d&quot;,&n);
                push(n);
                printf(&quot;inserito: %d&quot;,n);
                break;
            case '2':
                tmp = pop();
                printf(&quot;tolto: %d&quot;,tmp);
                break;
            case '3':
                tmp = top();
                printf(&quot;in testa: %d&quot;,tmp);
                break;
            case '4': 
                tmp = is_empty();
                if(tmp==0)
                    printf(&quot;pila vuota&quot;);
                else printf(&quot;pila non vuota&quot;);
                break;
            case '5': 
                make_empty();    
                printf(&quot;pila svuotata&quot;);
                break;
            case '6': stampa();
                break;

        } // end switch
    }


return 0;
}


DarkSchneider
l'errore mi pare chiaro:

hai definito più volte, anzichè una il main(), ovvero il punto di partenza
per l'esecuzione del tuo programma..

hyperion
eccetto che in test.c non vedo altri main()....

DarkSchneider
non vorrei dire una scemenza, ma nel file test.c, prova a fare un include di
stack.c, anzichè stack.h

recoil
sembra il classico problema da Makefile
capita, per distrazione, di includere due volte lo stesso file nella fase di linking. in questo modo c'è una definizione multipla delle stesse funzioni, nel tuo caso proprio il main.
il fatto è che dev-cpp non dovrebbe fare queste errori.
ti consiglio di compilare a mano quando puoi, almeno ti rendi conto di come funziona il Makefile... può sempre venire utile in futuro

apri il prompt di dos, aggiungi la directory bin di dev-cpp nel path poi edita il Makefile del tuo progetto e assicurati che non ci sia due volte il file test.o nel linking.
a quel punto lancia tu il make dal prompt di dos e vedi se funziona. se va, vuol dire che dev-cpp ha fatto macello, se invece il makefile era a posto non so che dirti

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate