含有string成员的结构体变量,为什么不能初始化?

struct CatInfo {
 string Title;
 int TotalCnt;
} Cats[2]={{"S01",10},{"S02",10}};

错误:

Compiling...
Yml.cpp
c:/documents and settings/administrator/yml.cpp(10) : error C2440: 'initializing' : cannot convert from 'char [4]' to 'struct CatInfo'
        No constructor could take the source type, or constructor overload resolution was ambiguous
c:/documents and settings/administrator/yml.cpp(10) : error C2440: 'initializing' : cannot convert from 'const int' to 'struct CatInfo'
        No constructor could take the source type, or constructor overload resolution was ambiguous

 

### C/C++ 结构体初始化为零的方法 在C和C++编程语言中,将结构体成员全部设置为零可以通过不同方式进行处理。 #### 使用 `memset` 函数(适用于C) 对于C语言中的结构体,可以利用标准库函数`memset()`来实现这一目标。该函数会把一块内存区域的内容设成特定值,在这里就是将其置零[^1]: ```c #include <string.h> // 需要包含此头文件以使用 memset() struct Example { int value; float decimal; }; int main() { struct Example exmpl; // 将整个结构体的数据都清零 memset(&exmpl, 0, sizeof(exmpl)); return 0; } ``` 需要注意的是,这种方法虽然简单有效,但对于含有指针或其他复杂类型的成员来说可能不够安全,因为这可能会导致悬空指针等问题。 #### 构造函数初始化(仅限于C++) 而在C++环境中,则更加提倡通过构造函数来进行初始化操作,这样不仅能够确保类型的安全性,还能让代码逻辑更为直观明了: ```cpp class Example { public: int value; float decimal; // 默认构造函数用于自动初始化所有字段为零 Example(): value(0), decimal(0.0f) {} }; ``` 如果希望创建一个实例并且立即设定其初始状态为空白(即全为零),可以直接调用默认构造器即可完成任务。 #### 利用复合字面量或大括号列表初始化(适合两者) 无论是哪种情况,都可以考虑采用复合字面量的方式来做同样的事情;或者是在声明变量的时候就给出完整的初始化表达式[^4]: ```c // 对于C而言 struct Example example = (struct Example){0}; // 或者直接按照定义时的语法格式化输入 struct Example anotherExample = {0}; ``` 以上两种做法均能有效地使新建立的对象处于已知的良好状态下——所有的数值型成员都被赋予了明确而合理的初值(这里是0)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值