C error: request for member ‘–‘ in something not a structure or union

C프로그래밍을 하다보면 자주보게되는 컴파일에러입니다.

배우는 단계라면 다른 컴파일에러와 달리 난해한 표현으로 해당 에러메세지가

알리고자 하는 바를 이해하고 넘어가는것이 중요하겠습니다. 예를들면,

/* x,y 좌표를 가지고있는 start */
struct start
{
  int x
  int y
};

/* start로 부터 좌표를 받아 플레이어의 2D 배열좌표를 바꿔주는 함수*/
void apply_move(position p1_array, const struct start *start)
{
   p1_array[start.x][start.y] = 0;
}

start 로부터 x, y 값을 받아 2D배열인 p1_array로 전달하여 좌표를 지정하는
위와 같은 함수가 있다고 하면, 해당구문은 다음과 같은 에러를 출력하게 됩니다.

e1.PNG

하나씩 짚어보자면 ‘start’ 안에 무언가는 struct or union이 아니다.

라는 얘기인데 자세히보면 파라미터로 받는 start 는 pointer 입니다. (*start)

이를 정정해주기위해 p1_array에 넣어주는값도 포인터라고 해야합니다.

그래서 다음과 같이하면 오류없이 컴파일됩니다.

/* x,y 좌표를 가지고있는 start */
struct start
{
  int x
  int y
};

/* start로 부터 좌표를 받아 플레이어의 2D 배열좌표를 바꿔주는 함수*/
void apply_move(position p1_array, const struct start *start)
{
   p1_array[(*start).x][(*start).y] = 0;
}

따라서 해당오류가 나는 부분은 전달받는 값을 a.b 에서 (*a).b 로 수정해주시면
대부분은 해결이 됩니다.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s