这是一个我一直在阅读的问题,但我仍然不清楚如何工作,因为我正在构建错误或不完整的类型lint错误。
我有一个需要opengl的项目,我正在编写低级opengl函数,然后我想建立在那些翻译[此后称为TU]单元之上,以构建更高级别的TU。
例如。
我有一个common_structs.h,它定义了一些这样的东西:
common_structs.h
#ifndef COMMON_STRUCTS_H
#define COMMON_STRUCTS_H
#include <OpenGL.h>
struct renderable_2D {
...
float angle;
GLshort vertex_count;
GLfloat vertices[12];
GLfloat colors[16];
GLshort indices[6];
GLfloat tex_coords[8];
...
};
struct texture_2D {
...
GLuint texture_id;
...
};
struct default_shader {
const char* vertex_shader_srouce;
const char* fragment_shader_source;
GLuint shader_program;
};
struct camera_2D {....};
#endif /* COMMON_STRUCTS_H */
我在自己的头文件中声明了这些结构,以避免循环依赖。
此文件未编译但我需要#include opengl
清除GLtypes的lint警告。
接下来是头和源TU,它们实现了这些类型的功能。通常
让我们看一下renderable_2D,例如:
#ifndef RENDERABLE_2D_H
#define RENDERABLE_2D_H
#include "../../common/common_structs.h" //include the definition of renderable_2d
struct renderable_2D* ren2d_new(void);
struct renderable_2D* ren2d_set_uv(struct renderable_2D* out, const float uv[]);
struct renderable_2D* ren2d_set_tint(struct renderable_2D* out, const float r,
const float g, const float b,
const float a);
struct renderable_2D* ren2d_set_alpha(struct renderable_2D* out, const float a);
struct renderable_2D* rend2d_set_z_index(struct renderable_2D* out,
const int index);
struct renderable_2D* rend2d_set_angle(struct renderable_2D* out,
const float angle);
#endif /* RENDERABLE_2D_H */
和一些源文件:
#include "../headers/renderable_2D.h"
#include <stdlib.h>
此文件包含标头并实现这些功能。接下来还有一个标题文件。
core_graphics.h
#ifndef CORE_GRAPHICS_H
#define CORE_GRAPHICS_H
#include "renderable_2D/headers/renderable_2D.h"
#include "default_shader/headers/default_shader_2D.h"
#include "default_camera_2D/headers/default_camera_2D.h"
#endif /* CORE_GRAPHICS_H */
这只是一个标题TU,它将包括组成这部分库的所有子TU。它应该被构建为一个共享库,因此接下来是另一个共享库
#include core_graphics/core_graphics.h
这就是问题所在。说我有另一个TU main.c,主要看起来像这样。
的main.c
#include "core_graphics/core_graphics.h"
#include <stdlib.h>
int main(int argc, char* argv[])
{
struct renderable_2D* rend = (struct renderable_2D*)calloc(1, sizeof(struct renderable_2D));
return 0;
}
我尝试calloc结构的行我得到lint错误说
invalid application of 'sizeof' to an incomplete type 'struct renderable_2d'
现在不完整的类型说它无法找到struct renderable_2D的定义,但是,从上面列出的来源,是否应该包含它?
core_graphics.h有common_structs.h的定义,它包含struct的定义吗?
struct renderable_2D - &gt; common_structs.h - &gt; core_graphics.h - &gt; main.c中