【发布时间】:2017-04-25 22:49:20
【问题描述】:
我在 file1.h 中定义了一个枚举。我想将此枚举作为另一个文件 file2.h 中的参数引用,而不包括 file1.h。现在我必须从 file3.h 调用 get_color() 函数。我收到两种不同类型的错误:
- 从不兼容的指针类型传递“get_color”的参数 1 [-Werror]
- 错误 1 已解决,但我得到一个不同的错误:col 的存储大小未知。
唯一的问题是我不能在 file2.h 中包含 file1.h。请建议我如何解决这个问题。
file1.h
typedef enum {
RED,
BLUE,
GREEN2,
} colors_t;
file2.h
void get_color(enum colors_t *col);
file3.h //选项 1
#include "file1.h"
#include "file2.h"
int main()
{
colors_t col;
get_color(&col); //error: passing argument 1 of 'get_color' from incompatible pointer type [-Werror]
}
file3.h //选项2
#include "file1.h"
#include "file2.h"
int main()
{
enum colors_t col;
get_color(&col); //error: storage size of col isn't known.
}
【问题讨论】:
-
我可能错了,但这不是 typedef 的工作方式。成为类型的是
colors_t,而不是enum colors_t。就像结构一样。 -
请注意,应该是
file3.c或main.c,而不是file3.h。如果文件中有函数定义,它可能不是标题。 -
如果您想同时使用
enum colors_t和colors_t,请写:typedef enum colors_t { RED, BLUE, GREEN2, } colors_t;。否则,选择一个并坚持下去。