2012-01-27 4 views
0

Possible en double:
const and globalcomportement étrange extern

Ce code produira erreur dans C++

// Foo.cpp 
const int Foo = 99; 

// Main.cpp 
extern const int Foo; 
int main() 
{ 
    cout << Foo << endl; 
    return 0; 
}  

Raison donnée par beaucoup est const mondiale a une portée interne et c'est par défaut statique.

solution

à cette question est: -

//Foo.h 
    extern const int Foo; 

    // Foo.cpp 
    #include "Foo.h" 
    const int Foo = 99; 

    // Main.cpp 
    #include "Foo.h" 
    int main() 
    { 
     cout << Foo << endl; 
    } 

Je pensais que extern est utilisé pour indiquer que la mémoire compilateur pour le indentifer est déjà alloué quelque part dans d'autres fichiers.
En appliquant la même logique sur le code ci-dessus, peut-on expliquer ce qui se passe ici ou extern a une signification différente en C++?
enter link description here
Voir également cette page il gâte mes tous .. intuitions

+1

Ne demandez pas la même question il y a environ 2 heures? Avez-vous lu les réponses là-bas? Si vous avez encore des doutes sur le Q que vous avez précédemment demandé, vous devez ajouter vos doutes en tant que commentaires aux réponses, ne pas commencer une nouvelle question pour cela. –

+0

@als je pense pour effacer les doutes des autres est la meilleure chose à faire à SO. –

+0

Eh bien, pas en posant la même question encore et encore, Si vous ne comprenez pas une réponse, demander des doutes dans la section des commentaires sous la réponse, ne pas commencer une autre question.S'il vous plaît lire la FAQ SO. –

Répondre

0

Ajout d'une ligne extern ... au RPC, qui - je pense - tue le comportement de liaison interne de la ligne suivante.

// Foo.cpp 
extern const int Foo; 
const int Foo = 99; 

a également fait quelques corrections sans rapport principal:

// Main.cpp 
#include <iostream> 
extern const int Foo; 
int main() 
{ 
    using namespace std; 
    cout << Foo << endl; 
    return 0; 
} 

Ils sont #include <iostream> et using namespace std;.

Cette réponse n'est pas raisonnablement raisonnée théoriquement, mais fonctionne pour moi avec g ++.

+0

MISE À JOUR: Si vous écrivez 'const int Foo = 99' dans Foo.cpp, c'est aussi correct. Le post référencé par Als explique. – Notinlist