Newsgroup: it.comp.lang.c++
Titolo: una banalità... ma un #include mi da  errore...

Cosciente che si tratta di una banalità, ma se mi aiutate sono sicuro che 
mi risparmierete molto tempo (ed arrabbiature).
Ottengo un errore dal compilatore per una definizione multipla di una 
funzione...
"test.o(.text+0x0):test.cpp: multiple definition of `doppio(int)'"
O forse è meglio dire che è il linker che segnala il mio errore.
Io volevo semplicemente usare un header file con alcune funzioni di utilità
Per prova ho quindi creato il file "doppio.h"
#ifndef DOPPIO_H
#define DOPPIO_H
long doppio(int numero)
{
    return (numero*2); }
#endif // DOPPIO_H
dopodichè ho incluso questo file in due file sorgenti, rispettivamente
in "test.cpp", che mi implementa i metodi della classe "test", e 
successivamente anche nel "main.cpp"
ecco i file in dettaglio:
TEST.H
-------
#ifndef TEST_H
#define TEST_H
class test
{
	public:
		// class constructor
		test(int inValore);
		// class destructor
		~test();
		// metodi
		long GetDoppio();
	private:
	    int valore;
};
#endif // TEST_H
TEST.CPP
--------
#include "test.h" // class's header file
#include "doppio.h" // funzione doppio header file
// class constructor
test::test(int inValore)
{
    valore = inValore;
}
// class destructor
test::~test()
{
	// insert your code here
}
long test::GetDoppio()
{
    return doppio(valore);
}
MAIN.CPP
--------
/************************************************************
Programma:      Perche' non funzioni?
File:           main.cpp
Funzione:       Descrizione:
Ambiente:       Dev-C++ 4.9.8.1, Windows 98
Note:           Revisioni:      1.00  30/07/03 16.26
************************************************************/
#include <iostream>
#include <stdlib.h>
 using namespace std;
//-- include di file utente
#include "doppio.h"
#include "test.h"
//-- pre-Dichiarazione delle funzioni
//-- Corpo della programma
int main(int argc, char *argv[])
{   test MioTest = test(123);
    cout << MioTest.GetDoppio() << endl;
    cout << doppio(321) << endl;
   system("PAUSE");	
    return 0;
}
-----------------------------------------
E' vero che ho fatto due include, uno in test.cpp ed uno in main.cpp 
(altrimenti mi diceva che "doppio" è una funzione sconosciuta), ma 
l'inclusione condizionale
#ifndef DOPPIO_H
#define DOPPIO_H
[...]
#endif
non mi dovrebbe preservare da una doppia definizione della funzione doppio?
Perdonate l'ignoranza, ma non riesco a capire il mio errore.
Grazie.
Checco.

#endif // DOPPIO_H
//doppio.h
#ifndef DOPPIO_H
#define DOPPIO_H
long doppio(int numero);
#endif
//doppio.cpp
#include "doppio.h"
long doppio(int numero){ return 2*numero; }
sbirish.

 mi risparmierete molto tempo (ed arrabbiature).
non essendo una dichiarazione, ma bensì una definizione di funzione (con
tanto di corpo)
il compilatore ha inserito in entrambi i file oggetto nel namespace globale
la stessa funzione
con lo stesso nome e lo stesso tipo di firma..
ti converrebbe +tosto che definirla nell'header di dichiararla soltanto, e
di creare un altro file
contenente il corpo.
antonio

Grazie ragazzi,
come farei senza di voi?????? ;)
adesso funziona (ovviamente)
... ed ho imparato ancora molto.
Siete meglio di un libro!
Ciao e grazie.
Checco.
