2013-06-26 6 views
0

이의 내가 구조체 있다고 가정 해 봅시다 내 프로그램, 오류로 끝납니다 :#DEFINE 일정한 구조체

struct location my_loc = { 2, 3 }; 
if (my_loc == INVALID_LOCATION) 
{ 
    return false; 
} 

이 컴파일되지 않습니다. 그런 방법으로 복합 리터럴을 사용하는 것이 합법적이지 않습니까?

Invalid operands to binary expression ('struct location' and 'struct location')

+0

'error : invalid preprocessing directive # DEFINE'과 같은 오류가 없습니까? 아니면 그냥 오타가 있습니까? –

+1

컴파일러에서 무엇을 말했는지 왜 말하지 않았습니까? 너 볼 수있어? 컴파일러가 무엇을 말했는지 쉽게 알면 쉽게 될 것입니다. 내 생각 엔 컴파일러가 정확히 무엇이 잘못되었는지를 알려주는 것입니다. 컴파일러에서 방출하는 오류 메시지를 읽고 해석하는 방법을 배워야합니다. 오류를 포함시키지 않았다는 사실은 오류 메시지의 내용을 무시한다는 것을 암시합니다. –

답변

5

구조체를 ==과 동일하게 비교할 수 없습니다.

5

코드에서 많은 오류가 발생했습니다.

  1. #DEFINE -이 같은 더 전처리가
  2. 당신은 == 운영자
  3. 당신의 구조에 대한 이름이 없습니다를 사용하여 구조 변수를 비교할 수 없습니다 (#define를 사용하지 않음)이 있습니다. location은 구조체 이름이 아닌 구조체 변수입니다. 따라서 사용할 수 없습니다 struct location my_loc
+0

@sigvardsen, 구조체의 개별 멤버를 수동으로 비교해야합니다. – VoidPointer

1

매크로 및 매개 변수와 함께 공백을 넣지 마십시오.

#define INVALID_LOCATION(location) { INT_MAX, INT_MAX } 

그것은 컴파일되지 것입니다 (오류 : 바이너리 == 또는 오류에 유효하지 않은 피연산자 : 전에 예상 표현 '{'토큰)은 C++에있는 경우

, 당신은 == 연산자를 오버로드 할 수 있습니다.

는 C에서는 이러한 비교

int EqualLocation (const struct location *, const struct location *); 

로서의 기능을 정의 할 수있다.

이 기능을 사용하면 구조체 당신이 언급 한 방법을

int IsInValid location(const struct location *); 
2

을 비교할 수 없습니다 구현할 수 있습니다. 코드를 다음과 같이 수정하십시오.

struct location my_loc = { 2, 3 }; 
    if ((my_loc.x == INVALID_LOCATION.INT_MAX) && (my_loc.y == INVALID_LOCATION.INT_MAX)) 
    { 
     return false; 
    }