2012-01-27 49 views
0

可能重複:
const and global的extern奇怪的行爲

該代碼被許多人視爲鑑於C++

// Foo.cpp 
const int Foo = 99; 

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

原因會產生誤差是全球常量具有內部範圍和它是默認的靜態。

解決方案是: -

//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; 
    } 

我常想,EXTERN被用來告訴內存爲indentifer已經在其他文件中的某個地方分配的編譯器。
在上面的代碼中應用相同的邏輯,任何人都可以解釋這裏發生了什麼,或者extern在C++中有不同的含義?
enter link description here
還要考慮這個網頁它毀了我所有的直覺..

+1

大約兩個小時前你沒問同樣的問題嗎?你有沒有讀過那裏的答案?如果您仍然懷疑您之前詢問過的問題,則應該將您的疑問作爲對答案的評論,而不是爲此提出新問題。 – 2012-01-27 13:54:28

+0

@als我認爲清除別人的疑慮是最好的。 – 2012-01-27 15:02:52

+0

好吧,不要一次又一次地提出同樣的問題,如果您不明白答案,請在答案下的評論部分提問,而不是開始另一個問題。請閱讀SO FAQ。 – 2012-01-27 15:11:03

回答

0

增加了一個extern ...線到CPP,這 - 我認爲 - 殺死下一行的內部聯動行爲。

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

也做了一些無關的更正主營:

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

他們#include <iostream>using namespace std;

這個答案在理論上沒有仔細推理,但對g ++有效。

+0

更新:如果您將'const int Foo = 99'寫入Foo.cpp,那也是正確的。 Als引用的帖子解釋道。 – Notinlist 2012-01-27 14:07:09