2013-07-28 3 views
3

서브 클래스가 main.cpp 파일의 변수에 액세스 할 수 있는지 궁금합니다. 예를 들어 :메인 클래스 변수에 액세스하는 C++ 서브 클래스

Main.ccp

int x = 10; 

int main() 
{ 
    return 0; 
} 

예 클래스의 CPP

Subclass::Subclass() 
{ 
    x = 5; 
} 

오류 :

error: 'x' was not declared in this scope 

나는 코딩에 새로운 오전이 어떻게 든 할 수 있는지 궁금했다 , 그렇지 않다면 어떻게 이런 일을 할 수 있습니까?

+0

전역 변수는 매우 희소하게 사용해야합니다. – Borgleader

+0

왜 이렇게해야합니까? – soon

+0

SDL을 사용하고 있는데 SDL_Surface 변수를 주 내부에서 만들고 다른 클래스의 변수에 액세스하려고 시도합니다. 두 클래스 모두에서 액세스 할 수 있어야합니다. – Rapture686

답변

5

이 가능하며, 일반적으로 좋은 생각하지만 :

Main.ccp

int x = 10; 

int main() 
{ 
    return 0; 
} 

예 클래스의 CPP

extern int x; 

Subclass::Subclass() 
{ 
    x = 5; 
} 

아마 당신이 대신하고 싶은 무엇을 전달하는 것입니다 관련 클래스 또는 함수에 대한 x 참조. 최소한

, 그것은 다르게 구조화하는 좋은 생각 일 것입니다 :

x.hpp :

extern int x; 

x.cpp

#include "x.hpp" 

int x = 10; 

class.cpp :

#include "x.hpp" 

Subclass::Subclass() 
{ 
    x = 5; 
} 
2

extern dec class'cpp에서 x를 찾은 다음 컴파일러는 다른 cpp 파일 자체에서 x 정의를 찾습니다.

코드에 약간의 변화 :

하여 Main.cpp

#include "class.h" 

int x = 10; 

int main() 
{ 
    return 0; 
} 

예 클래스의 CPP

#include "class.h" 

extern int x; 

Subclass::Subclass() 
{ 
    x = 5; 
} 

헤드 파일 class.h

class Subclass { 
public: 
    Subclass(); 
}; 

그리고 통근자를위한 키워드, 참조 이 : How do I use extern to share variables between source files?

+0

나는 지금 이것을했다. 대신'x '에 대한 정의되지 않은 참조가있다. – Rapture686

+0

@ user2548588 흥미 롭다. 최소한 헤드 파일에 클래스 선언이 있어야하고 양쪽 cpp 파일에 포함되어야합니다. 맞습니까? 더 구체적으로 말하면, 나는 나의 대답을 편집했다. – lulyon

1

C++은 java가 아닙니다. 여기에 메인 클래스가 없으며 클래스의 메소드에서 글로벌 변수에 액세스하는 것은 문제가되지 않습니다. 문제는 다른 컴파일 단위 (다른 소스 파일)에 정의 된 변수에 액세스하는 것입니다.

문제를 해결하는 방법은 Vaughn Cato가 제안하는 것처럼 (내가 이것을 입력하는 동안) 변수를 사용하는 컴파일 단위에 변수가 정의되어 있는지 확인하는 것입니다.

관련 문제