【求救】struct 中string 声明报错

achang21 2010-06-20 12:48:43
请教大家一个问题:我在struct 中 用 string 定义成员 编译报错,希望大家帮我解决下,不胜感激!

代码:
#include <iostream>
#include <string>
using namespace std;

struct student
{
char name[20];
int age;
float salary;
string degree;
};

int main()
{
student zhangsan=
{
"Zhang",
28,
9000,
"Bachelor"
};

string teststring="Just for testing";

cout<<"Name:"<<zhangsan.name<<endl;
cout<<"Age: "<<zhangsan.age<<endl;
cout<<"Salary: "<<zhangsan.salary<<endl;
cout<<"Degree: "<<zhangsan.degree<<endl;

cout<<"The teststring is: "<<teststring<<endl;
return 0;
}

执行报错:error C2552: 'zhangsan' : non-aggregates cannot be initialized with initializer list
Error executing cl.exe.


...全文
175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
不说害怕 2010-06-21
  • 打赏
  • 举报
回复
啊?可以的吗?我糊涂了.
不说害怕 2010-06-21
  • 打赏
  • 举报
回复
char name[20]; 不能这样赋值. 不允许的.
muzizongheng 2010-06-21
  • 打赏
  • 举报
回复
学习了, 呵呵。
wutaihua 2010-06-20
  • 打赏
  • 举报
回复
很有可能你用的是VC6.0 string 和CString都是没有固定空间大小的。都不建议作为结构体的成员变量。但是神奇的是VS2008可以直接编译过去。所以尽量还是别用了,string和Cstring都是根据内容来分配空间大小的。最好用数组
achang21 2010-06-20
  • 打赏
  • 举报
回复
刚查了下,对这个问题 “C++ primer 第五版”,地域struct 能否将string 作为成员,取决于你使用的是哪种编译器,因为有些编译器(例如: Borland C++ 5.5 和 7.0 之前的Microsoft Visual C++)不支持以string对象作为成员的struct进行初始化。

再次感谢 wutaihua 和visualeleven 。
achang21 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]

因为你结构体中的string degree;成员的size大小未知.不能这样初始化
只有struct的size已知的情况下才能这样初始化
[/Quote]

非常感谢! 那就是最好在struct中用 char[x] 这种方式比较好了,是不?
Eleven 2010-06-20
  • 打赏
  • 举报
回复
因为你结构体中的string degree;成员的size大小未知.不能这样初始化
只有struct的size已知的情况下才能这样初始化
achang21 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wutaihua 的回复:]

很有可能你用的是VC6.0 string 和CString都是没有固定空间大小的。都不建议作为结构体的成员变量。但是神奇的是VS2008可以直接编译过去。所以尽量还是别用了,string和Cstring都是根据内容来分配空间大小的。最好用数组
[/Quote]

非常感谢你! 我试了下,在vs20008 确实可以通过,我用的确实是vc6.0 ,在此谢过,后边继续向你学习 ^_^

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧