Include actor.h from controller.h so the header compiles on its own
controller.h declares three handler pointers taking an akgl_Actor * and included nothing that declares that type, so any translation unit reaching for it before akgl/actor.h failed with "unknown type name 'akgl_Actor'". src/controller.c never noticed because it includes akgl/game.h first, and tests/controller.c carried a comment explaining the workaround. Included rather than forward-declared: akgl_Actor is a typedef of a named struct and repeating a typedef is C11, not C99. It closes no cycle -- actor.h reaches only types.h and character.h. tests/headers.c is a whole suite for one #include on purpose. A second #include after the first proves nothing about the second, because by then the first has dragged its dependencies in; covering another header means another file shaped like this one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,12 @@
|
||||
#include <SDL3/SDL.h>
|
||||
#include <akerror.h>
|
||||
#include "types.h"
|
||||
// The binding handlers below take an akgl_Actor *, so this header cannot be
|
||||
// included before akgl/actor.h without one. akgl_Actor is a typedef of a named
|
||||
// struct, and repeating a typedef is not C99, so it is included rather than
|
||||
// forward-declared. actor.h reaches only types.h and character.h, so this does
|
||||
// not close a cycle.
|
||||
#include <akgl/actor.h>
|
||||
|
||||
/** @brief How many control maps exist -- effectively the local player limit. */
|
||||
#define AKGL_MAX_CONTROL_MAPS 8
|
||||
|
||||
Reference in New Issue
Block a user