2010-02-15 7 views
0

Fichier 1:Comment déclarer un pointeur char externe?

static char* const path; //GLOBAL 

int main() 
{ 
    path = FunctionReturningPath(); 
    UsePath() 
} 

Fichier 2:

extern char* const path; //GLOBAL from file 1 

UsePath() //function using global 
{ 
    something = path; 
} 

(Pseudo)

Voudrait utiliser le chemin dans le fichier 2.
je définir le global dans le principal dans le fichier 1, est-ce une mauvaise pratique en utilisant un global?

et ne compile pas:

Compile Error: error LNK2001: unresolved external symbol _path 

Toute aide est appréciée. Je vous remercie.

+1

L'un a 'const' et l'autre non. Est-ce que c'est prévu? – GManNickG

+0

corrigé, merci –

+1

Maintenant les 'const' ne correspondent pas. :) Le premier est un pointeur constant vers un 'char' mutable, le second est un pointeur mutable vers une constante' char'. – GManNickG

Répondre

6
static char* path; //GLOBAL 

Mauvais. le rendre statique signifie qu'il est local au fichier, et ne peut pas être exposé en utilisant extern. Vous voulez:

char* path; //GLOBAL 
5

Le mot-clé statique de l'étendue de fichier signifie que la variable est spécifique à cette unité de compilation. Débarrassez-vous de cela.

+5

(Nitpick, ignorer si vous (dis?) Comme) Le terme approprié est "unité de traduction". – kennytm

+0

@KennyTM, merci, je me demande où j'ai (mis-) entendu "unité de compilation"? –

+0

Java connaît les unités de compilation –

1

Supprimez le mot-clé static car il rendra le symbole invisible pour l'éditeur de liens.

En général, vous devriez éviter les variables globales lorsque vous le pouvez. Au lieu de cela, passez la variable en paramètre si possible, ou utilisez un espace de nom (si vous utilisez C++). Avec les variables globales, vous risquez de provoquer des conflits de noms avec les bibliothèques externes et la variable peut être modifiée de n'importe où.

Questions connexes