Newsgroup: it.comp.lang.c++
Titolo: collisione di oggetti diversi con lo stesso nome

Abbiamo un problema piuttosto rognoso.
In un progetto di una certa dimensione, che utilizza un paio di
librerie di terze parti, ci sono due oggetti, uno di una libreria di
una terza parte, e uno di un'altra libreria di un'altra terza parte,
che sfigatamente sono stati dichiarati con lo stesso nome!!!
Due classi, completamente diverse, ma con lo stesso nome, piuttosto
banalotto invero.
Per cui adesso, compilando, il compilatore rogna perche' trova
l'oggetto gia' definito in precedenza.
Siccome e' escluso intervenire sui files.h per ridenominare uno dei
due, vengo qua a chiedere se qualcuno e' a conoscenza di qualche
trucco per far digerire al compilatore questa situazione.
Abbiamo provato a far derivare da quelle, due classi con nome diverso,
a fare tentativi con typedef, #define etc, e abbiamo esaurito le idee.
Qualcuno ha qualche idea su come gestire la cosa?


Io rigiro la domanda: perché non funzionerebbe con
"namespace"? (leggasi: se ci ho pensato io ci avete
pensato voi come prima cosa).
-- 
"La teoria è sapere come funzionano le cose e
non sapere come farle funzionare; la pratica è
sapere come far funzionare la cose senza sapere come
funzionano; il nostro scopo è unire la pratica
alla teoria per riuscire a non far funzionare
le cose senza capire come abbiamo fatto"

 pensato voi come prima cosa).
Anch'io ho pensato ai namespace. Forse le librerie sono C e non C++?
E.

 banalotto invero.
Penso che dovreste fare una nuova libreria "wrapper" di una delle due 
che utilizzate.
E.


Aggiornamento: abbiamo risolto col namespace e con la modifica a mano
di qualche centinaio di righe per inserire il prefisso del namespace.
In effetti la rogna derivava dal fatto che uno dei due files di
include e' concepito per essere compilato tanto in C quanto in C++ con
un ifdef _cplusplus, e per questo motivo l'ipotesi del namespace era
stata scartata a priori e non piu' riconsiderata fino alla
disperazione di stamattina che mi ha portato a postare una richiesta e
contemporaneamente ad inventarci le cose piu' disparate, quali riti
vudu' e il dipingere le porte col sangue di agnello pasquale.
Alla fine il namespace e' quello che ci ha permesso di proseguire.
Non e' un progetto che stavo seguendo, ma sono stato coinvolto questa
mattina per via della situazione disperata... e una delle prime cose
che ho fatto e' stata di postare su usenet (i miei colleghi non ci
pensano mai a usenet, vanno sempre a googolare)
Comunque adesso e' stato considerato risolto.

 Comunque adesso e' stato considerato risolto.
perchč chi ha scritto la libreria č un "po pirla" :-)
di solito quando (qua) si fa una libreria che deve essere compatibile
col C e col C++ si fa diciamo 2 wrapper... il wrapper c++ usa gli
oggetti e i namespace la versione C usa una naming convenction del tipo:
nomeLibreriaInCamelCase_funzione[numeroEtipoDeiParametri]
tipo:
miaLibreria_somma3i(int a,int b, int c)
oppure
miaLibreria::somma();
la versione C++ grazie all'overloading non si usa la name convection...
mentre tipo in c se hai 3 interi hai 3i se tre float 3f etc..
i piů pigri fanno solo la versione C ma poi se capita e mi riesce li
faccio "punire"