vc里结构体编译问题,..........高手留步

pusshi 2008-12-20 12:02:27
以下代码在DEV能通过,在VC++6.0出现
error C2552: 'hsarm1' : non-aggregates cannot be initialized with initializer list
error C2552: 'hsskill1' : non-aggregates cannot be initialized with initializer list
请问下是怎么回事,应该怎么改......谢了
#include <iostream>
#include <string>
#include <iterator>
#include <map>
#include <fstream>
#include <vector>
#include <stdlib.h>
using namespace std;

typedef map<string, int> mup;
typedef struct
{
string first;
int second;
} key;
typedef struct
{
string name;
int harm;//伤害
int money;//钱或熟练度
int addmp;//内力
int adddefen;//加防
int delmp;//损耗内力;
string sname;//门派名字
} Wea;
//Wea weapon[W];

/*istream& operator>>(istream& sin,Wea& w)
{
sin>>w.name>>w.harm>>w.money>>w.addmp>>w.adddefen>>w.delmp;
if (!sin)
w=Wea();
return sin;
}*/

ostream& operator<<(ostream& sout,const Wea& w)
{
sout<<w.name<<" 攻:"<<w.harm<<" 熟练度:"<<w.money<<" 门派:"<<w.sname<<"\t";
return sout;
}

typedef struct
{
string doorname;
vector<key> doorarm;
vector<Wea> doorskill;
// vector<Rose> doornpc;
}Door;
int main()
{
Door husa;
husa.doorname="华山";

//华山武器
key hsarm1={"华山剑", 2};
//key hsarm2={"华山刀", 2};
//key hsarm3={"君子剑", 10};
//key hsarm4={"东升华山", 60};
husa.doorarm.push_back(hsarm1);
//husa.doorarm.push_back(hsarm2);
//husa.doorarm.push_back(hsarm3);
//husa.doorarm.push_back(hsarm4);
//华山武功
Wea hsskill1={"华山刀法", 0, 5, 1, 5};
/*Wea hsskill2={"乾坤刀法", 0, 8, 2, 8};
Wea hsskill3={"反两仪刀法", 0, 10, 5, 10};

Wea hsskill4={"华山剑法", 0, 5, 1, 5};
Wea hsskill5={"夺剑三仙剑", 0, 6, 2, 6};
Wea hsskill6={"狂风快剑", 0, 8, 4, 8};
Wea hsskill7={"独孤九剑", 0, 20, 15, 20};

Wea hsskill8={"长拳十段锦", 0, 5, 1, 5};
Wea hsskill9={"伏虎掌", 0, 8, 3, 8};
Wea hsskill10={"劈石破玉拳", 0, 9, 5, 9};

Wea hsskill11={"华山内功", 0, 10, 1, 0};
Wea hsskill12={"华山心法", 0, 20, 5, 0};
Wea hsskill13={"紫霞神功", 0, 30, 10, 0};

Wea hsskill14={"华山身法", 0, 5, 5, 0};]
Wea hsskill15={"独孤九剑总决", 0, 30, 20, 25};*/


husa.doorskill.push_back(hsskill1);
/*husa.doorskill.push_back(hsskill1);
husa.doorskill.push_back(hsskill2);
husa.doorskill.push_back(hsskill3);
husa.doorskill.push_back(hsskill4);
husa.doorskill.push_back(hsskill5);
husa.doorskill.push_back(hsskill6);
husa.doorskill.push_back(hsskill7);
husa.doorskill.push_back(hsskill8);
husa.doorskill.push_back(hsskill9);
husa.doorskill.push_back(hsskill10);
husa.doorskill.push_back(hsskill11);
husa.doorskill.push_back(hsskill12);
husa.doorskill.push_back(hsskill13);
husa.doorskill.push_back(hsskill14);
husa.doorskill.push_back(hsskill15);*/

cout<<husa.doorskill[0];
Door ba=husa;
cout<<ba.doorskill[0];
while(1);
return 0;

}



...全文
408 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengyuecanqiu 2012-09-26
  • 打赏
  • 举报
回复
这个问题已经有四年了啊!!不过看了还是决定回复一下:
修改方法:
将两个结构体定义中的
string first、string name等统统做一下替换:
char first[20],char name[20]......
然后程序完美运行!!
myismymxd 2008-12-20
  • 打赏
  • 举报
回复
`我吃饭了,,
tangshuiling 2008-12-20
  • 打赏
  • 举报
回复
引用陶大妈的一句话:别在vc6中浪费生命啦!
ypb362148418 2008-12-20
  • 打赏
  • 举报
回复
确实有错误,错误提示是这样的non-aggregates cannot be initialized with initializer list,意思是“非总量无法初始化与初始名单”(这是Google翻译的)。我觉得这个赋值应该一个一个赋值,比如:hsarm1.frist=“华山派”;hsarm1.second=2;
pusshi 2008-12-20
  • 打赏
  • 举报
回复
还有一个问题,为什么我在DEV里包含我自己的头文件无效,头文件和源文件已在目录下了,
谁知道
wiowei 2008-12-20
  • 打赏
  • 举报
回复
哦,我看错了,是初始化,不过报的error是赋值问题。
你的程序我可以运行
wiowei 2008-12-20
  • 打赏
  • 举报
回复
key hsarm1={"华山剑", 2};
Wea hsskill1={"华山刀法", 0, 5, 1, 5};
结构体初始化后不能再用列表{}赋值,只能一个一个成员赋值,或者你写个构造函数赋值
wiowei 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pusshi 的回复:]
还有一个问题,为什么我在DEV里包含我自己的头文件无效,头文件和源文件已在目录下了,
谁知道
[/Quote]
加入项目了没?用的#include "..."?
funnybunny 2008-12-20
  • 打赏
  • 举报
回复
刚才用了一小段测试了一下,大概的原理一样,问题处在初始化赋值的时候string,就和我们说的
含char[]数组的结构体不能直接在结构体=赋值的差不多吧,我试着用结构体的构造函数就可以了,
嗯,和类的一样,只不过都是public的而已。
测试的如下,你可以对应着该一下你的就可了吧~
#include <iostream.h>
#include <string>

using namespace std;


void main()
{

struct hell{
int a;
string b;
double c;
hell(int x ,string y,double z){a=x;b=y;c=z;}
};

struct hell *m=new hell(1,"hey!",3.14);

cout<<m->a<<" "<<m->b.c_str()<<" "<<m->c<<endl;
}
lbh2001 2008-12-20
  • 打赏
  • 举报
回复
string--->char * 试试

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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