2012-01-05 5 views
0

나는 3 개의 클래스가있는 C++ DLL을 가지고 있습니다. "stdafx"헤더 파일에 정적 부울 변수를 추가했습니다 (모든 클래스에 포함되어 있기 때문에). 사용하려고합니다. 모든 수업이 내 변수를 보는 반면, 각 변수는 다른 변수를 가진 것처럼 보입니다. 한 번 클래스에서 변수를 true로 설정하면 다른 클래스에서 false라는 것을 알 수 있습니다. DLL 내에서만 모든 클래스에서 사용할 수있는 변수를 만들 수있는 방법이 있습니까?C++ DLL에서 전역 변수 사용

+0

stdafx.cpp

bool MyBool = false; 

다음 extern 그 안에 변수를 선언하려면? 아마도 수정하지 않을까요? –

+0

이 문제를 해결하는 데 도움이되는 아이디어가 있습니다. 이것은 나에게 가장 이해하기 쉬워서 같이 갔다. – Seb

+0

고유 한 헤더를 만듭니다. –

답변

4

글쎄, 당신은 그것을 static으로 표시 했으므로 그렇게됩니다. 대신 머리글에 extern 레이블을 지정하고 TU로 정의하십시오.

stdafx을 수정하지 마십시오. 그것은 당신 것이 아닙니다. 자신의 공유 헤더를 사용하십시오.

+4

'stdafx.h '를 수정할 수 있습니다. 파일에서 자동으로 생성 된 주석은 이렇게 말합니다 * // stdafx.h : 표준 시스템 포함 파일 또는 빈번하게 사용되지만 자주 변경되지 않는 프로젝트 별 포함 파일 용 파일 포함 * – Praetorian

+0

@Praetorian : _really_ 나쁜 생각. 주로 IDE에 의해 자동 생성되기 때문에; 당신의'bool'은 어떤 점에서 길을 잃을 것입니다. –

+0

자동 생성되지만 프로젝트를 만들 때 한 번만 수행하고 그 후에는 IDE에 의해 수정되지 않습니다. stdafx.h와 함께 사용할 수있는 미리 컴파일 된 헤더를 만들 수는 없다고 생각하므로 단지 옵션 일 수 있습니다. – Praetorian

2

변수가 static이고 프로젝트의 모든 소스 파일에 포함되어있는 stdafx.h으로 선언하고 있습니다. 즉, 각 번역 단위에는 고유 한 변수 사본이 포함됩니다. 이는 정확히 사용자가 보는 행동입니다.

이 문제를 해결`당신의 MSVS 미리 컴파일 된 헤더 지원을 stdafx` 아닌가요 stdafx.h

extern bool MyBool;