2017-12-04 1 views
-1

네임 스페이스에 변수를 선언하려고 할 때 Visual Studio에서 C2086 오류가 발생하여 한 코드 파일에서 정의하고 다른 코드 파일에 액세스합니다. 'RecvVarProxyFn 스킨의 재정 :: fnSequenceProxyFn : | | 2 오류네임 스페이스에서 변수를 선언하고 정의 할 때 재정의 오류 C2086

... file_one.cpp :
(codeblocks에서) GCC가있는 건물, 오류가 (내 하드 디스크에 ... == 경로) 입니다 '
... file_one.h | 4 | 주 :'오류가 동일) 주에 액세스 라인 ((// 사용) 비활성화 경우에도 이전에 여기

선언 RecvVarProxyFn 스킨 :: fnSequenceProxyFn '.

file_one.h :

typedef int RecvVarProxyFn; 

namespace Skins { 
    RecvVarProxyFn fnSequenceProxyFn; // "previously declared here" 
} 

file_one.cpp

#include "file_one.h" 
RecvVarProxyFn Skins::fnSequenceProxyFn = 0; // redefinition error 2086 

MAIN.CPP 내가있는 변수를 정의 내 시도에 대한 재정의 오류가 이유는 무엇입니까

#include "file_one.h" 
int main() 
{ Skins::fnSequenceProxyFn = 1; // making this a comment does not help 
    return 0; 
} 

별도의 코드 파일?

참고 :
I 2015 대상 플랫폼이 v140로 설정 버전 8.1
및 플랫폼 도구 세트로 설정 비주얼 스튜디오를 사용하고 있습니다.

+1

당신이 멤버 전에 유형을 지정하면 내 생각, 컴파일러는 새로운 선언으로 – alseether

+0

당신이 변수를 정의하고 그것을 선언 사이의 차이를 알고 있는지 생각? 한 곳에서 'extern'을 사용하여 게임을 했습니까? – Yunnosch

+0

@Yunnosch 나는하지 않았다. 솔직히 extern 키워드를 잊어 버렸습니다. – Igor

답변

0

정의 중 하나를 선언으로 변경하려면 키워드 extern을 사용하십시오.
분명히 헤더의 줄이 첫 번째 선택입니다.

namespace Skins { 
    extern RecvVarProxyFn fnSequenceProxyFn; 
}