PDA

Visualizza la versione completa : [C++] Moduli


FinalFantasy
22-02-2004, 13:47
Studiando il mio libro di c++ sono arrivato nella parte in cui parla dei moduli. C'è un paragrafo che parla su come si sviluppano gli header.
Ho fatto come dice il libro e ho creato la mia lib dove nel file .h ho messo i prototipi delle funzione, nel file .cpp del file di intestazione ho messo i corpi delle funzioni. Credo che questa procedura sia alquanto normale.
Nel momento in cui io voglio sfruttare la mia lib e faccio #include "nomelib.h" e richiamo le sue funzioni, il linker mi da questo errore:
Undefined symbol euro_lire (near&) in module euroconv2.cpp

Una cosa così. Come avete capito sto cercando di fare un semplice euroconvertitore, anche perché è dall'inizio dell'anno che lavoro con c++ imparo da solo.

Cosa posso fare per utilizzare la mia lib e far scomparire quell'errore?

Grazie e buona domenica a tutti!! :ciauz:

Xadoom
22-02-2004, 14:01
Anche il mio libro diceva di fare così, io non ci sono mai riuscito!!
Mi dava sempre errori strani! :dhò:
Ora metto tutta la classe (intestazioni e funzioni) in un unico file .h e va tutto bene.
Del tipo:


#ifdef CLASSE_H
#define CLASSE_H
class Classe{....};

Classe :: ....metodi....
#endif

ciao :ciauz:

FinalFantasy
22-02-2004, 14:12
Anche il mio libro dice di mettere #ifndef e #endif però fa anche esempi senza di loro. Io nn ho ancora capito a ke servono. Cavolo: è il primo argomento che mi sta venendo difficile da capire :(

Xadoom
22-02-2004, 14:16
Credo sia un messaggio al precompilatore per dirgli quello che sta che sta per compilare. Detto malissimo, ma credo sia così!

iguana13
22-02-2004, 19:11
E' un metodo per evitare di ridefinire più volte la stessa classe.

Angioletto
22-02-2004, 21:58
#ifndef #define e #endif servono semplicemente ad evitare un problema detto "inclusione multipla"..
come avrete capito attraverso l'inclusione, nei vari passi che ti permettono di creare il file eseguibile (passi che vengono eseguiti attraverso la semplice chiamata al compilatore) pezzi di codice vengono ricopiati in un unico file. Immagina ora che su + file sia stata inclusa la libreria iostream: in quel file ripeti + volte lo stesso codice??? con quelle notazioni si evita questo probl..

quello poi scritto dopo (CLASSE_H) non è nient'altro che una convenzione...

ora, sperando che nel nomelib.cpp sia stato incluso il nomelib.h, tieni presente che l'inclusione avviene in due diversi "modi":

#include <nomelib.h>

richiama la libreria da una cartella standard (quella dove è installato il dev)

#include "nomelib.h"

richiama la libreria dalla cartella ove si è memorizzato il prog..

spero vi siano utili questi consigli, altrimenti avrai fatto un errore di prog..

un'altra cosa: devi compilare il tutto creando un project..

a presto!!

pixer
22-02-2004, 22:33
Lo standard ANSI C prevede anche l'utilizzo di

#pragma once

al posto della coppia #ifndef / #endif

FinalFantasy
22-02-2004, 23:55
Angioletto...io nn uso dev, ma il buon vecchio ide turbo c++ della borland (mi pare). Quello in modalità DOS. Obsoleto ma utile ai miei scopi

Angioletto
23-02-2004, 14:19
scusa, FinalFantasy, ma avevo letto [c++] e non avevo pensato ad altri compilatori!!
Ho una domanda per Pixer: quando creo un file da includere dovrei quindi scrivere:

# pragma once
# define

giusto??

Loading