2017-09-14 6 views
0

저는 C++로 게임을 만들고 있습니다. SFML을 사용하고 있습니다. game.h 및 game.cpp 파일이 연결되어 있고 변수를 공유/사용하고 있습니다.다른 모든 파일에서 1 개의 변수를 사용하는 올바른 방법

다른 파일에서 이러한 변수 중 일부를 사용하고 싶습니다. 나는 시도했다 :

extern int variable; 

그리고 잘 동작하고있다. 문제는 내가 extern을하려고 할 때입니다.

sf::Texture hoverTexture; 
std::vector<sf::Sprite> Hover_Tiles; 
sf::Sprite hover; 

그리고 다른 cpp 파일에서 이러한 스프라이트/텍스처를 사용하십시오. 코드를 읽기 쉽도록 몇 개의 파일로 나누려고합니다. 그래서 내 질문에 그 언급 된 스프라이트/텍스처를 다른 파일에서 올바르게 사용할 수 있도록 할 수 있습니다. 가장 좋은 방법은 무엇입니까? 가능하지 않은 경우 어떻게해야하며 어떻게해야합니까?

다른 파일에서 이러한 스프라이트/텍스처를 사용하는 방법. 그들을 연결하는 방법? 적어도 어딘가로 나를 가리 키십시오. 감사.

편집 : 결국

내가 무효화 같은 map.cpp에서 다른 파일 map.cpp

#include "game.h" 
#include "map.h" 

#include "SFML\Graphics.hpp" 
#include <vector> 

std::vector<sf::Sprite> Tiles; 
sf::Sprite tile; 

sf::Texture seaTexture; 
sf::Texture grassTexture; 
sf::Texture rockTexture; 
sf::Texture forestTexture; 

sf::Texture hoverTexture; 
std::vector<sf::Sprite> Hover_Tiles; 
sf::Sprite hover; 

sf::Texture hoverTexture2; 
std::vector<sf::Sprite> Hover_Tiles2; 
sf::Sprite hover2; 

sf::Texture houseTexture; 
std::vector<sf::Sprite> House_Tiles; 
sf::Sprite house; 


int map[20][10] = 
{ 
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 
    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } 
}; 

에서 game.h

extern std::vector<sf::Sprite> Tiles; 
extern sf::Sprite tile; 

extern sf::Texture seaTexture; 
extern sf::Texture grassTexture; 
extern sf::Texture rockTexture; 
extern sf::Texture forestTexture; 

extern sf::Texture hoverTexture; 
extern std::vector<sf::Sprite> Hover_Tiles; 
extern sf::Sprite hover; 

extern sf::Texture hoverTexture2; 
extern std::vector<sf::Sprite> Hover_Tiles2; 
extern sf::Sprite hover2; 

extern sf::Texture houseTexture; 
extern std::vector<sf::Sprite> House_Tiles; 
extern sf::Sprite house; 

extern int map[20][10]; 

위에 포함 함수는 map.h에서 처음 정의됩니다. 이 함수는 game.cpp에서 훌륭하게 작동하는 일부 코드를 보유하고 있습니다 (이 코드를 제가 game.h에 게시 한 경우).

Exception thrown at 0x7749B2E3 (ntdll.dll) in App.exe: 0xC0000005: 
Access violation writing location 0x00000004. 

map.cpp 라인에서 : 내가 게시 된이 코드는 문제를 해결에 도움이되기를 바랍니다

sf::Texture seaTexture; 

또한 던져 예외에 문제가 있습니다. extern을 사용하여 다른 스프라이트/텍스처/변수를 다른 파일로 전송할 때는 작동하지 않지만 하나 (game.h 및 game.cpp)의 모든 것이 훌륭하게 작동합니다.

+1

오류 메시지, 경고 및 어떤 일이 일어나는지 관찰 된 행동 (프로그램을 가정하는 것은 물론, 빌드) 당신이를 실행할 때 추가 추천 프로그램. 그렇지 않으면 우리는 꽤 많이 눈이 멀어 질 것입니다. 또한 [mcve] 제작을 권장합니다. 그들은 거의 항상 문제를 찾아내는 데 매우 도움이됩니다. – user4581301

+1

내 의견으로는 - 최선의 방법은 전역 변수를 전혀 사용하지 않는 것입니다. 매개 변수를 전달하십시오. –

+0

@ArtemyVysotsky 예를 들어 주시겠습니까? – Sadin97

답변

0

extern 변수를 선언하기 전에 lib 헤더를 포함해야합니다. 그렇지 않으면 컴파일러는 클래스가 무엇인지 전혀 알지 못합니다.

otherfile.h

#ifndef OF_H_ 
#define OF_H_ 

#include <Texture.hpp> 
#include <Sprite.hpp> 
#include <vector> 

extern sf::Texture hoverTexture; 
extern std::vector<sf::Sprite> Hover_Tiles; 
extern sf::Sprite hover; 

#endif 

game.cpp

#include <game.h> 

sf::Texture hoverTexture; 
std::vector<sf::Sprite> Hover_Tiles; 
sf::Sprite hover; 
+0

extern 변수를 선언하기 전에 lib 헤더를 포함했습니다. 나는 이해. 첫 번째 게시물을 편집하고 질문을 더 잘 이해할 수 있도록 몇 가지 코드를 추가했습니다. – Sadin97

관련 문제