es ho due file:
codice:
//file f1.cpp
#include <iostream.h>
void saluta(){
cout << "ciao" ;
}
codice:
#include <iostream.h>
//file f2.cpp
void saluta(){
cout << "buonasera" ;
}
(dopo avere incluso <iostream.h> i due file f1.cpp e f2.cpp contengono ognuno una funzione che si chiama saluta(), però quella del file f1 visualizza su video la scritta "ciao" mentre la funz del file f2 visualizza la scritta "buonasera".
ora ammettiamo che ci sia un terzo file che richiama le funzioni dei file f1.cpp e del file f2.cpp:
codice:
//file prog.cpp
#include "f1.cpp"
#include "f2.cpp"
void main()
{
saluta()
saluta()
}
questo file include i file f1.cpp e f2.cpp e poi usa le funzioni definite in questi due file.
l'intenzione sarebbe quella di scrivere "ciao" con la chiamata della funzione saluta() definita nel file f1.cpp e poi scrivere "buonasera" con la chiamata della funzione dell'altro file, ma siccome il nome è identico nei due casi, si ha una situazione di ambiguità e quindi di errore. la soluzione sono i namespace.
con i name space:
codice:
//file f1.cpp
#include <iostream.h>
namespace name1
{
void saluta()
{
cout "ciao" ;
}
}
//file f2.cpp
#include <iostream.h>
namespace name2
{
void saluta()
{
cout << "buonalera" ;
}
}
codice:
#include "f1.cpp"
#include "f2.cpp"
void main()
{
nome1::saluta() ;
nome2::saluta() ;
}
In questo caso la prima funzione chiamata è quella appartenente al namespace nome1, la seconda è quella appartenente al namespace nome2: senza rischio di ambiguità. l'effetto sarà quello di stampare sullo schermo prima la scritta "ciao" poi la scritta "buonasera".