PDA

Visualizza la versione completa : [C++] macro e "sovrapposizioni"


standard
31-07-2003, 17:19
Ciao,
compilo con VC++ 6, il mio problema legato (da quanto deduco dal compilatore) dal fatto che per una funzione membro uso un nome gi posseduto da una macro, per farla breve:



#include <iostream>
#include <string>
using namespace std;

class Lic{
int c;
public:
int getc() const{ return c;}
}
il preprocessore interpreta la getc come la "chiamata" alla macro con lo stesso nome e mi segnala l'errore dovuto al fatto che non lo chiamata correttamente...
c' un modo migliore per evitare questo conflitto che non sia cambiare il nome della funzione membro?

ChReAn
31-07-2003, 17:36
#include <iostream>
#include <string>
using namespace std;

namespace Lic
{
class Lic{
int c;
public:
int getc() const{ return c;}
};
}

ChReAn
31-07-2003, 17:37
In pratica definisci un namespace diverso.
Per utilizzare classi e variabili dichiarate all'interno del namespace dovrai prima dichiarare l'utilizzo del namespace (using namespace mionamespace; ) e poi usare la sintassi mionamespace::funzione oppure mionamespace::variabile.

standard
31-07-2003, 17:43
avevo gia provato questa strada (ma per sicurezza l'ho riprovata) e niente...i namespaces mi garantiscono l'assenza di conflitto con le altre classi o funzioni...ma le macro, essendo gestite dal preprocessore mi sa che oltrepassano tutto....

Nemmeno l'ho istanziata la classe e mi segnala cmq un pacco d'errori...

ChReAn
31-07-2003, 17:50
Ma getc non una macro che io sappia, una funzione di libreria...

E infatti il seguente codice non d alcun errore e funziona.



#include <iostream>

class ciccio
{
private:
char c;
public:
ciccio() { c= '2'; }
char getc () { return c;}
};

void main ()
{
ciccio bariccio;
cout << bariccio.getc() << endl;
}

standard
31-07-2003, 17:55
a me da errore...

c' sia la funzione che la macro, in particolare la macro in stdio.h ed :


#define getc(_stream) (--(_stream)->_cnt >= 0 \
? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))

e compilando il tuo codice ho ben 12 errore tra cui il primo (in realt questo uno warning, ma fa capire) dice:

warning C4003: not enough actual parameters for macro 'getc'

mah...

ChReAn
31-07-2003, 18:00
Io sto usando gcc sotto linux... Forse quello il punto... :stordita:
Continuo ad indagare. :master:

standard
01-08-2003, 12:19
Originariamente inviato da ChReAn
Io sto usando gcc sotto linux... Forse quello il punto... :stordita:
Continuo ad indagare. :master:
quello sicuramente spiega perch a te funziona e a me no ;)
ma non risolve il problema del conflitto tra macro e funzioni...

continuo ad indagare anch'io...;)

Loading