2012-01-27 3 views
0

가능한 중복 :
const and global통근 이상한 행동

많은 주어진 C++

// Foo.cpp 
const int Foo = 99; 

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

이유에 오류가 발생합니다이 코드는 글로벌 const를 가지고 내부 범위와 기본 정적입니다. 이것에

솔루션입니다 : -

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

내가 그 통근이 indentifer 메모리가 이미 다른 파일 어딘가에 할당 컴파일러에게하는 데 사용됩니다 생각하는 데 사용됩니다.
위의 코드에 동일한 로직을 적용하면 누구나 여기서 일어나는 일을 설명 할 수 있습니까? 아니면 extern이 C++에서 다른 의미를 갖는지 ?? 내가 생각하는 - -
enter link description here
또한 내 모든 직관을 망치고있다이 페이지 있습니다 .. CPP에 extern ... 라인을 추가

+1

약 2 시간 전 동일한 질문을하지 않았습니까? 거기서 답을 읽었습니까? 이전에 질문했던 질문에 대해 여전히 의문이 생기면 질문에 대한 질문을 답변으로 추가해야하며 새로운 질문은 시작하지 말아야합니다. –

+0

@als 나는 다른 사람들의 의심을 분명히하는 것이 그렇게하는 것이 가장 좋은 방법이라고 생각한다. –

+0

글쎄, 같은 질문을 몇 번이나 반복해서 물어 보는 것이 아닙니다. 답을 이해하지 못한다면 답안 아래에있는 의견란에 의심을 물으십시오. 다른 질문을 시작하지 마십시오. SO FAQ를 읽어보십시오. –

답변

0

을 고려 다음 줄의 내부 연결 동작을 죽인다.

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

업데이트 : Foo.cpp에'const int Foo = 99'라고 적어도 올바른 것입니다. Als가 참조한 게시물은 설명합니다. – Notinlist