C 함수의 매개 변수로 포인터를 전달하는 방법을 잘못 이해 한 것 같습니다. 과거에는 전역 변수와 모든 단일 C 파일을 속여서 사용했습니다. 별도의 C 파일을 사용하여 단일 실행 파일에 링크하는 방법을 배우려고합니다.컴파일러는 struct가 struct라고 정의했을 때 매개 변수가 struct **라고 말합니다. *
룸은 typedeffed 구조체입니다.
나는 functions.h라는 보호 헤더 파일에서 함수를 프로토 타입이 있습니다
void init_rooms(Room *rooms[], Room *current_room);
/* (pointer to the room struct array, pointer to current room) */
내가 다음의 main.c와 functions.c 모두 해당 헤더를 포함했다.
functions.c의 함수 정의는 다음과 같습니다
void init_rooms(Room *rooms[], Room *current_room){
current_room = rooms[0];
...}
나는이 같은 main.c에있는 함수를 호출 :
Room * current_room; /* pointer to current player location */
Room * rooms = malloc(sizeof(struct room)*NUM_ROOMS); /* allocate memory for rooms */
init_rooms(rooms, current_room);
그리고이 오류가 얻을 :
main.c|11|error: incompatible pointer types passing 'Room *' (aka 'struct room *') to parameter of type 'Room **' (aka 'struct room **'); take the address with & [-Werror,-Wincompatible-pointer-types]|
을
자, 여기에 포인터에 대한 포인터를 정의하지 않았고, 모든 타입을 가지고있는 것처럼 보입니다. 나를. 컴파일러가 매개 변수가 ** 형식이라고 말하는 이유는 무엇입니까?
차이점이 있다면 Linux에서 Clang을 사용하고 있습니다.
편집 : 나는 또한 컴파일러가 제안한대로 포인터 역 참조를 시도했지만 다른 오류가 발생했습니다.
그 소리 오류가 나에게 정말 명확하다. – DRC
나에게 분명했다면, 나는 너를 괴롭히지 않았을거야! – Andomonir
'Room * rooms []':'rooms'은'Room' 포인터의 배열입니다. 'Room * rooms'은'Room'에 대한 포인터입니다. – BLUEPIXY