2013-02-17 2 views
1

다음은 2 개의 구조체에 대한 정의입니다. 다음은이 구조체를 사용하는 짧은 메서드 본문입니다. 컴파일러는 오류가 발생하는 이유 이해가 안 :이 구조체의 포인터에 올바르게 액세스하려면 어떻게해야합니까?

physics.c:95: error: incompatible types in assignment

cpBodycpSpace 문제의 일부가 아닌 외부 라이브러리에서 유형입니다.

typedef struct gameBody gameBody; 

struct gameBody 
{ 
    cpBody *body; 
    int numberOfShapes; 
    cpShape *arrayOfShapes; //This stores an array of pointers to Shapes 
}; 

//Struct that stores the cpSpace object and the array of pointers to the body objects 
typedef struct gameSpace gameSpace; 

struct gameSpace 
{ 
    cpSpace *space; 
    int numberOfObjects; 
    gameBody *arrayOfObjects;  //This stores an array of gameBodys 
}; 

void physicsAddBody(gameSpace *space, gameBody *body, int objectIndex) 
{ 
    gameBody *array = space -> arrayOfObjects; 
    array[objectIndex] = body; //THIS IS WHERE THE ERROR IS THROWN 
} 
+0

[objectIndex] = body; – nope

답변

2

array[objectIndex] = body;

는 오른쪽 gameBody*에, gameBody입니다.

구조체를 복사하려고합니까, 아니면 포인터를 포인터 배열에 할당하겠습니까?

+1

고마워요, 당신이 던지고있는 라인으로 나를 도울 수 있다면 고마워요. 동일한 오류 : gameBody * gBody = space -> arrayOfObjects [i]; – nope

+0

@nope : 두 가지 매우 다른 연산이 있기 때문에 조심해야합니다. (A) 구조체에 구조체를 할당하면 구조체에 대한 포인터를 구조체에 할당하면 해당 구조체의 데이터가 복사됩니다 (B). 포인터 배열 만 포인터가 관련됩니다. –

+0

그래서 해결책은 무엇입니까? – nope

0

귀하의 마지막 행은 다음과 같습니다

array[objectIndex] = *body; 

몸이 gameBody하지만 gameBody에 대한 포인터가 아니기 때문에.

(그리고 난 당신이 어딘가에 메모리를 할당 한 희망 ...) 왼쪽에서

+0

고마워, 같은 오류를 던지고있는 줄을 도울 수 있다면 궁금 해서요 : gameBody * gBody = space -> arrayOfObjects [i]; 예 메모리가 할당되었으므로 segfault가 필요하지 않습니까? – nope

+0

gameBody * gBody = & (space-> arrayOfObjects [i]) 또는 동일합니다 : gBody = space-> arrayOfObjects + i –

관련 문제