2017-11-27 3 views
0

자신을 가르치고 있습니다. 자습서를 따라 화면을 돌아 다니며 이미지를 이동했습니다. 이제는 직접 해보고 코드를 모듈화하는 방법을 이해하고 코드를 어떻게 진행하는지 알고 있습니다.구조체의 요소를 정의하려고 할 때 계속 오류가 발생합니다.

구조체를 생성하여 플레이어 좌표를 가져 와서 내 game_loop.h 파일로 호출했습니다. 하지만 그것은 struct에서 변수를 설정할 수 없습니다. 간결하게 유지하기 위해 중요한 비트 만 포함하려고했습니다. 전체 코드를 게시해야하는지 알려주세요. 내가 뭘 잘못하고있어.

//includes 
#include "game_loop.h" 

//main body 
int main(int argc, char *argv[]) 
{ 
    //TODO make game menu and link it here 

    //TODO make game loop and put it here 
    initSDL(); 
    renderGame(); 
    handleEvent(); 

    //make game cleanup and put it her 
    destroySDL(); 

    return 0; 
} 

INT 헤더 파일 game_loop.h - player.h 파일>

#include <stdio.h> 
#include <SDL2/SDL.h> 
#include <SDL2/SDL_image.h> 
#include "player.h" 

#define pSIZE 64 
#define wWIDTH 1280 
#define wHEIGHT 720 

//variables for starting SDL 
SDL_Event event; 
SDL_Window *window = NULL; 
SDL_Renderer *render = NULL; 

SDL_Surface *bgSurface = NULL; 
SDL_Texture *bgTexture = NULL; 

SDL_Surface *pSurface = NULL; 
SDL_Texture *pTexture = NULL; 

int flags = 0;  //window flags may need to change in the future 

struct Player player; 
player.x = 600; 
player.y = 300; 

void initSDL() 
{ 
//initializing SDL 
    if(SDL_Init(SDL_INIT_VIDEO)!= 0) 
{ 
    printf("ERROR starting SDL: %s\n", SDL_GetError()); 
}else{printf("Starting SDL: Successful.\n");} 

- 당신은 함수의 외부 실행 코드의 라인을 가지고>

struct Player{ 
    int x; 
    int y; 
}; 
+0

사용중인 코드를 게시 할 수 있습니까?, 코드를 읽을 수 없다면 어떻게 잘못하고 있는지 알 수 있습니까? –

+0

할당하려는 전역 범위. 그것을 방법 안에 넣어 라. 'player.x = 600' – coderredoc

+0

질문에 코드를 추가했습니다. 미안하다. 코딩에 관한 포럼에서 처음으로 질문을한다. 그리고 질문에 대한 코드 형식을 지정하는 데 어려움을 겪고 있습니다. 나는 거기에 전체 코드를 넣으려고합니다 – Nelyn

답변

3

:

Player player; 
player.x = 600; 
player.y = 300; 

첫 번째 줄은 av ariable. 괜찮습니다. 다음 두 줄은 문장이 아니기 때문에 그렇지 않습니다.

구조체를 정의 할 때 초기화해야합니다. 다음과 같이 할 수 있습니다.

Player player = { 600, 300 }; 

또한 헤더 파일에 변수를 정의하는 것은 좋지 않습니다. 여러 소스 파일에서 헤더를 사용하면 여러 정의로 인해 오류가 발생합니다. 헤더 파일에서

이 변수는 초기화없이 extern로 선언해야합니다

extern Player player; 

은 그럼 당신은 정확히 하나의 소스 파일의 초기화와 정의를 둘 것입니다.

마찬가지로 함수의 경우 헤더에 함수 선언을 넣고 하나의 소스 파일에 함수를 정의하십시오.

+0

편집 : 이것은 여러 줄 형식을 더 좋아하는 일을 한 것 같았다. 만약 내가 함수에서 여러 행 문을 사용할 수 정의 할 수 있습니까? 자습서를 따라 할 때 효과가 있었으므로 차이점에 대해 조금 혼란스러워합니다. 감사합니다. 나는 그것에 대해 더 많은 것을 시도 할 것입니다. 나는 그저 올바른 방향으로 한 점을 원했다. – Nelyn

+0

@Nelyn 할당 문을 함수 내부로 이동하면 가능합니다. 다른 함수가 그것을 읽으려고하기 전에 일찍 그것을 할 필요가 있습니다. 그러나 초기화 구문이 바람직합니다. 또한 원할 경우 가독성을 위해 여러 행의 이니셜 라이저를 분리 할 수 ​​있습니다. – dbush

+0

정말 고마워요. 이것은 임시로 나는 헤더에 전달되는 메인에있는 것들을 정의하는 것을 계획하고 있지만, 나는 그저 물건을 먼저 얻으려고 노력하고있다. 줄을 어지럽히는데 어마 어마한. 나는 그것을 생각하고 구조 대가 성장하면 gunna 않았다. 방금 테스트 할 변수가 두 개 있습니다.이것은 처음으로 헤더 파일을 만드는 것이므로 정보와 인내심에 감사드립니다. – Nelyn

관련 문제