2016-08-20 5 views
0

우선이 정보가 정확하지 않다는 것을 알고 있습니다. 그러나, 나는 물건을 테스트하고 싶습니다. 그리고 헤더 파일에 전역 변수를 만들고 main.cpp 파일에서 extern을 선언하면 사용할 수 있습니다. (이 클래스에는 클래스를 포함하지 않았습니다. 헤더). 그러나 실제로 클래스 헤더를 포함하는 유일한 차이점을 찾으려고하면 오류가 발생합니다.헤더 파일에 정의 된 전역 변수 사용하기

(error: ld returned 1 exit status).

왜 이런 일이 발생합니까? 요청에 따라

코드 :

하여 Main.cpp :

#include <iostream> 
#include "albino.h" 
using namespace std; 

extern int iVar; 

int main() 
{ 
    cout << iVar << endl; 
} 

albino.h :

#ifndef ALBINO_H 
#define ALBINO_H 

int iVar = 10; 

class albino 
{ 
    public: 
     albino(); 
}; 

#endif // ALBINO_H 

albino.cpp 나던 아무것도.

ERROR: ||error: ld returned 1 exit status|

+1

코드에 오류 메시지를 넣으십시오. –

+0

[최소, 완료 및 확인 가능한 예제] (http://stackoverflow.com/help/mcve)를 게시하지 않으시겠습니까? 왜 원시 파일에 글래블을 작성하고 헤더 파일에 extern으로 선언할까요? – MikeCAT

+0

@RichardCritten done. – cobzz

답변

2

내가 잘못 생각한 것 같습니다.

전역 변수 을 한 번만 정의하십시오.; 그러나 번으로,을 여러 번 사용할 수 있습니다.

int i = 0; 헤더에 _not 있도록 만 번 기존되어야하지만 정확히 하나 개의 cpp 파일에 (어느 단지 그것을 발견하려고 인간의 컴파일러 문제가되지 않습니다) 의미; 그리고 extern int i;은 헤더에있을 수 있으므로 모든 곳에서 반복됩니다. 도 참조 How do I use extern to share variables between source files?

+0

질문을 편집했는데 한 번만 전역 변수를 정의하는 중이지만 main.cpp에 클래스 헤더를 포함 시키면 include가 없어도 작동합니다. 헤더 파일에 전역 변수를 선언해서는 안된다는 것을 알고 있습니다. – cobzz

+0

@cobzz :이 답변은 여전히 ​​정확합니다. 헤더에 전역 변수를 선언해서는 안된다는 것을 알고 있다고하더라도, 그렇게하는 것은 여러분이하는 일입니다. (단어는 실제로 "정의"이고 차이는 핵심 임) –

+0

내가 할 수없는 이유에 대해 "기술적 인"탐구를 원합니다. 내가 알아야 할 것은 알고 있지만 정확히 왜? – cobzz

관련 문제