在 C++ 中以 C 方式初始化结构
Initialize a struct in C++ the C way
我在 C 中初始化了一个静态结构,但在 C++ 中它不想编译。我如何获得 C++ 中仍与 C 兼容的等效项? (linux 我试图在 MSVC 上编译的 C 代码)
typedef struct float3 {
float x,y,z;
} float3;
void main() {
static float3 value = (float3){ 1.f, 5.f, 10.f };
}
MSVC (visual studio 2019) 在 (float3) 之后的左括号“{”处给出错误。
Error (active) E0029 expected an expression cpptestvs D:\Projects\cpptestvs\cpptestvs\cpptestvs.cpp 11
尝试在 void main()
.
内的语句中删除对 float3 的转换
static float3 value = (float3){ 1.f, 5.f, 10.f };
这是一个 compound literal,它在 C 中是允许的,但在 C++ 中是不允许的。 C 允许您创建类型为 float3
的未命名对象并使用初始化列表对其进行初始化。某些编译器(例如 GCC)支持将其作为扩展,但 MSVC 不支持。
想做什么就做什么:
static float3 value = { 1.f, 5.f, 10.f };
这是aggregate initialisation:结构float3
中的每个非静态class成员都是从初始化列表的相应子句复制初始化的。您的结构是一个聚合,因为它没有用户声明的构造函数,没有私有或受保护的非静态数据成员,没有基 classes,也没有虚函数。
我在 C 中初始化了一个静态结构,但在 C++ 中它不想编译。我如何获得 C++ 中仍与 C 兼容的等效项? (linux 我试图在 MSVC 上编译的 C 代码)
typedef struct float3 {
float x,y,z;
} float3;
void main() {
static float3 value = (float3){ 1.f, 5.f, 10.f };
}
MSVC (visual studio 2019) 在 (float3) 之后的左括号“{”处给出错误。
Error (active) E0029 expected an expression cpptestvs D:\Projects\cpptestvs\cpptestvs\cpptestvs.cpp 11
尝试在 void main()
.
static float3 value = (float3){ 1.f, 5.f, 10.f };
这是一个 compound literal,它在 C 中是允许的,但在 C++ 中是不允许的。 C 允许您创建类型为 float3
的未命名对象并使用初始化列表对其进行初始化。某些编译器(例如 GCC)支持将其作为扩展,但 MSVC 不支持。
想做什么就做什么:
static float3 value = { 1.f, 5.f, 10.f };
这是aggregate initialisation:结构float3
中的每个非静态class成员都是从初始化列表的相应子句复制初始化的。您的结构是一个聚合,因为它没有用户声明的构造函数,没有私有或受保护的非静态数据成员,没有基 classes,也没有虚函数。