Newsgroup: it.comp.lang.c++
Titolo: aiuto con i Namespace

Salve a tutti,
ho un problema a livello di linker.
Premetto che uso ambiente di sviluppo Linux /Eclipse c++
In previsione di un progetto in C++ abbastanza corposo ho pensato di 
organizzare il file-system così:
Progetto
   |-include
   |	|-libA
   |	|  |- pippo.h
   |	|  |- pluto.h
   |	|
   |	|-libB
   |	|  |-topolino.h
   |
   |-src
	|-pippo.cpp
	|- ...
	|- ....
Quello che mi vorrei aspettare di scrivere è:
come intestazione di pippo.cpp
#include <libA.pippo.h>
#include <libB.topolino.h>
using namespace libA;   //il namespace su cui sono definiti i prototipi 
di tutte le classi all'interno di include/libA
using namespace libB;   //il namespace su cui sono definiti i prototipi 
di tutte le classi all'interno di include/libB       (come topolino.h)
Qualcuno ha un idea su come fare sia da shell che da  Eclipse c++ a 
istruire il linker e il builder?
grazie anticipatamente a chi risponderà
S4lv0

 organizzare il file-system così:
file system ... :o
A parte questo, da quello che ho capito del poi, poco 
probabilmente, mi è sembrato che tu abbia ricalcato la struttura 
dei files del progetto con identica rappresentazione di namespaces.
Probabilmente era voluto. Se non lo era, considera che la 
gerarchia (con annidamenti vari) dei namespaces è completamente 
ortogonale, anzi, indipendente, dal sottostante layout dei files 
sorgente del progetto. Infatti entro un singolo file puoi 
definire quanti namespaces vuoi, anche annidati, e d'altra parte 
puoi estendere un namespace, già parzialmente definito in un 
file, in un altro file diverso, ampliandolo.
La gerarchia dei namespaces è però la vera utilità sia 
nell'evitare le collisioni dei nomi pubblici sia nel supportare 
i comodi intellisense, per gli IDE che li usano.
Non uso Eclipse, quindi non immagino quali problemi sortisca coi 
namespaces. VC++ non ne da di sorta, e non mi è capitato di 
dover dare alcuna indicazione specifica al linker. Tu che errori 
incontri ?
Se non ho colto il senso della domanda, che in parte mi è 
sfuggito, abbi pazienza
ciao
soviet_mario


Soviet_Mario ha scritto:

Ho capito quello che dici, in effetti ero convinto che ci fosse un 
legame tra il file-system e l'utilizzo dei namespace.
Detto questo il risultato a me non cambia ... continuo ad avere errori.
Sono in fase di modellazione e ho definito alcune classi astratte che 
hanno attualmente alcuni metodi virtuali puri e qualche campo protetto.
Nella directory "$homeProject/include/dbSpace";
Ho costruito una classe astratta madre e altre 2 sottoclassi che la 
estendono aggiungendo altri metodi virtuali puri.
Nella directory $homeProject/src
ho scritto un file cpp che fornisce una definizione di alcuni metodi.
Ho scoperto adesso che l'unico a darmi problemi è il costruttore.
Premetto che non l'ho volutamente definito un costruttore in tutte le 
classi astratte.
Ogni volta che compilo:
se commento il costruttore allora anche il linker va a buon fine
Diversamente ottengo questi  errori:
g++ -L"/home/s4lv0/workspaceServer/WagoInstance/Debug/src" 
-o"WagoInstance"  ./src/SensorScaldino.o  ./Main/Main.o
./src/SensorScaldino.o: In function `sensorScaldino':
/home/s4lv0/workspaceServer/WagoInstance/Debug/../src/SensorScaldino.cpp:15: 
undefined reference to `vtable for dbSpace::sensor::sensorScaldino'
/home/s4lv0/workspaceServer/WagoInstance/Debug/../src/SensorScaldino.cpp:15: 
undefined reference to `vtable for dbSpace::sensor::sensorScaldino'
./src/SensorScaldino.o: In function `wagoObject':
/home/s4lv0/workspaceServer/WagoInstance/include/dbSpace/wagoObject.h:26: 
undefined reference to `vtable for dbSpace::wagoObject'
./src/SensorScaldino.o: In function `wagoSensor':
/home/s4lv0/workspaceServer/WagoInstance/include/dbSpace/wagoChilds.h:43: 
undefined reference to `vtable for dbSpace::wagoSensor'
collect2: ld returned 1 exit status
Implementazione       Dich.		Dich Abstract    Dich Abstract
SensorScaldino.cpp => SensorScaldino.h=> wagoChilds.h=> wagoObject.h
ciao by Salvo

 istruire il linker e il builder?
Per il linker dipende da dove fai finire le librerie generate, se per
builder intendi chi pilota il compilatore, devi fare in modo che la
tua directory Progetto/include sia comprese tra quelle dove il
compilatore cerca gli header. Per molti compilatori si usa l'opzione -
I .
Per il resto mi sa che faresti molto bene a studiarti qualche libro.
Ciao,
Nicola

 Diversamente ottengo questi  errori:
Non penso ci siano problemi con i namespace. Mi sembra di capire che 
stai cercando di istanziare una classe astratta. Cerca di isolare il 
problema e posta il codice.
E.