首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-10-20 
vc里结构体编译问题,..........高手留步以下代码在DEV能通过,在VC++6.0出现error C2552: hsarm1 : non-a

vc里结构体编译问题,..........高手留步
以下代码在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
请问下是怎么回事,应该怎么改......谢了

C/C++ code
#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;    }


[解决办法]
key hsarm1={"华山剑", 2};
Wea hsskill1={"华山刀法", 0, 5, 1, 5};
结构体初始化后不能再用列表{}赋值,只能一个一个成员赋值,或者你写个构造函数赋值
[解决办法]
确实有错误,错误提示是这样的non-aggregates cannot be initialized with initializer list,意思是“非总量无法初始化与初始名单”(这是Google翻译的)。我觉得这个赋值应该一个一个赋值,比如:hsarm1.frist=“华山派”;hsarm1.second=2;
[解决办法]
引用陶大妈的一句话:别在vc6中浪费生命啦!
[解决办法]
`我吃饭了,,
------解决方案--------------------


将string--->char * 试试
[解决办法]
刚才用了一小段测试了一下,大概的原理一样,问题处在初始化赋值的时候string,就和我们说的
含char[]数组的结构体不能直接在结构体=赋值的差不多吧,我试着用结构体的构造函数就可以了,
嗯,和类的一样,只不过都是public的而已。
测试的如下,你可以对应着该一下你的就可了吧~
[code=C/C++][/code]#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;
}

[解决办法]

探讨
还有一个问题,为什么我在DEV里包含我自己的头文件无效,头文件和源文件已在目录下了,
谁知道

热点排行