2014-05-19 3 views
2

voici le code:extern const char * pointeur const ou un tableau extern const char [] cause de lien erreur

file1.cc

#include <stdio.h> 

const char *pointerString = "pointerString"; 
const char arrayString[] = "arrayString"; 
const char* const constpointerString = "constpointerString"; 

extern void printString(); 

int main(void) 
{ 
    printString(); 
    return 0; 
} 

file2.cc

#include <stdio.h> 

extern const char *pointerString; 
extern const char arrayString[]; 
extern const char* const constpointerString; 

void printString() 
{ 
    printf("pointerString: %s\n", pointerString); 
    printf("arrayString: %s\n", arrayString); 
    printf("constpointerString: %s\n", constpointerString); 
} 

commande complite: g ++ fichier1.cc fichier2.cc -o sortie lien d'erreur:

/tmp/cczatCe9.o: In function `printString()': 
file2.cc:(.text+0x1f): undefined reference to `arrayString' 
file2.cc:(.text+0x30): undefined reference to `constpointerString' 
collect2: ld returned 1 exit status 

version g ++: 4.6.3 (Unbuntu/Linaro 4.6.3-1ubuntu5)

quelqu'un peut-il aider?

+0

L'objet 'const' a une liaison interne, donc les variables ne sont pas visibles à l'extérieur. – Rakib

+0

pense de toute façon, je reçois une réponse de 'http: // stackoverflow.com/questions/14977058/extern-const-char-const-un-constant-giving-me-linker-erreurs' –

Répondre

1

Mettez vos déclarations externes dans un fichier d'en-tête et incluez-la dans les fichiers source . Ce qui se passe est que dans file1.cc, arrayString et constpointerString ont une liaison interne (parce que c'est la valeur par défaut pour const objets), et ne peut donc pas être vu d'autres unités de traduction.

Sinon, bien sûr, vous pouvez les définir:

extern char const arrayString[] = "arrayString"; 
extern char const* const constpointerString = "constpointerString"; 

Mais en général, il est préférable d'utiliser l'en-tête.