Se si desidera sia per fare riferimento alla stessa variabile, uno di loro dovrebbe avere int k;
, e l'altro dovrebbe avere extern int k;
Per questa situazione, in genere si mette la definizione (int k;
) in un .cpp
file e mettere la dichiarazione (extern int k;
) in un'intestazione, da includere ovunque sia necessario accedere a tale variabile.
Se si desidera che ogni k
essere una variabile indipendente che appena capita di avere lo stesso nome, è possibile contrassegnarli come static
, come: static int k;
(in tutti i file, o per lo meno tutti, ma un file). In alternativa, ci si può un namespace anonimo:
namespace {
int k;
};
Anche in questo caso, in tutti, ma al massimo uno dei file.
In C, il compilatore in genere non è così schizzinoso su questo. In particolare, C ha un concetto di "definizione provvisoria", quindi se si ha qualcosa come int k;
due volte (nello stesso file di origine o separato) ognuno sarà trattato come una definizione provvisoria, e non ci sarà un conflitto tra loro . Questo può essere un po 'confuso, tuttavia, perché non è ancora possibile avere due definizioni che includono entrambi gli inizializzatori: una definizione con un inizializzatore è sempre una definizione completa, non una definizione provvisoria. In altre parole, int k = 1;
visualizzato due volte sarebbe un errore, ma int k;
in un posto e int k = 1;
in un altro no. In questo caso, lo int k;
verrà trattato come una definizione provvisoria e lo int k = 1;
come una definizione (e entrambi si riferiscono alla stessa variabile).
fonte
2012-04-06 16:52:41
T & T Group? È il nome della tua azienda? Non consiglierei di firmare con il nome della tua azienda quando farai le domande di base. Soprattutto se i tuoi clienti si aspettano che tu protegga le loro informazioni di qualche tipo. – CodyBugstein
** Suggerimento per gli amici: ** manca '#include" stdafx.h "' è anche la fonte di questo errore. – Bitterblue