gpt4 book ai didi

c++ - Typedef 适用于结构但不适用于枚举,仅适用于 C++

转载 作者:可可西里 更新时间:2023-11-01 18:26:34 26 4
gpt4 key购买 nike

我有以下代码:

test_header.h:

typedef enum _test_enum test_enum;
enum _test_enum
{
red,
green,
blue
};

typedef struct _test_struct test_struct;
struct _test_struct
{
int s1;
int s2;
int s3;
};

测试.c:

#include <test_header.h>
#include <stdio.h>

int main()
{
test_struct s;
s.s1=1;
s.s2=2;
s.s3=3;
printf("Hello %d %d %d\n", s.s1, s.s2, s.s3 );
}

test_cpp.cpp:

extern "C"{
#include <test_header.h>
}
#include <stdio.h>

int main()
{
test_struct s;
s.s1=1;
s.s2=2;
s.s3=3;
printf("Hello %d %d %d\n", s.s1, s.s2, s.s3 );
}

请注意我是如何以相同的方式对结构和枚举进行类型定义的。当我使用 gcc -I 在纯 C 中编译时。 test.c -o test 它工作正常,但是当使用 gcc -I 在 C++ 中编译时。 test_cpp.cpp -o test_cpp,我得到以下错误:

./test_header.h:1:14: error: use of enum ‘_test_enum’ without previous declaration

所以我的问题是双重的:为什么这在 C 中有效但在 C++ 中无效,为什么编译器接受结构而不接受枚举?

在枚举上方声明结构时,我得到了相同的行为。我正在使用 GCC 4.8.2。

最佳答案

枚举是一个整数类型,编译器根据枚举值的范围选择确切的类型。所以你不能做一个枚举的前向声明。

关于c++ - Typedef 适用于结构但不适用于枚举,仅适用于 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com