VirtualWall m_virtua_wall;这么定义不行吗
时间: 2024-03-20 17:44:21 浏览: 31
在 C++ 中,通过这种方式定义结构体变量是合法的,但是这里的问题可能在于结构体成员变量没有被初始化。如果在定义结构体变量之后没有为成员变量分配内存或者初始化成员变量,可能会导致程序崩溃。你可以尝试在定义结构体变量时进行初始化,例如:
```
VirtualWall m_virtua_wall = {0, "虚拟墙", QPointF(0,0), QPointF(0,0)};
```
这样可以将 `m_virtual_wall_id` 初始化为 0,将 `m_virtual_wall_name` 初始化为 "虚拟墙",将 `m_wall_point_begin` 和 `m_wall_point_end` 初始化为 (0,0)。如果你的结构体成员变量类型不是 `int` 和 `QString`,需要根据实际情况进行修改。
相关问题
m_virtual_wall_name 初始化为 nullptr吗
在 C++11 之后,`std::string` 类型的默认构造函数会将其成员变量初始化为空字符串,因此不需要将 `m_virtual_wall_name` 显式初始化为 `nullptr`。如果你使用的是 C++11 及以上版本,可以直接将 `m_virtual_wall_name` 定义为 `std::string` 类型并且不进行初始化,例如:
```
struct VirtualWall {
int m_virtual_wall_id;
std::string m_virtual_wall_name;
QPointF m_wall_point_begin;
QPointF m_wall_point_end;
};
VirtualWall m_virtual_wall;
```
这样,`m_virtual_wall_name` 成员变量会自动初始化为空字符串。
struct VirtualWall { int m_virtual_wall_id; std::string m_virtual_wall_name; QPointF m_wall_point_begin; QPointF m_wall_point_end; };需要初始化吗,如果需要初始化,那么怎么样初始化才好
是的,结构体变量的成员变量必须在使用之前进行初始化。在 C++11 及以上版本中,可以使用以下方式进行初始化:
1. 通过成员初始化列表进行初始化:
```
VirtualWall m_virtual_wall = {0, "", QPointF(0,0), QPointF(0,0)};
```
这样可以将 `m_virtual_wall_id` 初始化为 0,将 `m_virtual_wall_name` 初始化为空字符串,将 `m_wall_point_begin` 和 `m_wall_point_end` 初始化为 (0,0)。
2. 在定义结构体变量时使用默认构造函数进行初始化:
```
VirtualWall m_virtual_wall{};
```
这样可以使用默认构造函数将 `m_virtual_wall` 结构体变量的所有成员变量初始化为默认值,即 `m_virtual_wall_id` 初始化为 0,`m_virtual_wall_name` 初始化为空字符串,`m_wall_point_begin` 和 `m_wall_point_end` 初始化为 (0,0)。
需要注意的是,如果你使用的是旧版本的 C++,则默认构造函数可能不会被自动调用,这时需要使用第一种方式进行初始化。