注册 登录
编程论坛 C++教室

[求助]结构初试话问题

kisscjy 发布于 2007-05-24 19:04, 600 次点击

有一段代码:

#include <iostream>
#include <string>
using namespace std;
struct people
{
string name;
double number;
};

int main()
{
people a={"Jack",123};

cout<<a.name<<a.number;

return 0;

}

输出错误为:error C2552: 'a' : non-aggregates cannot be initialized with initializer list

而当把string a 改成 char a[100]的时候,程序没有问题....

请问这是为什么

6 回复
#2
I喜欢c2007-05-24 19:56

你没有 重载构造函数啊...

这样初始化是不对的..

using namespace std;
struct people
{
people(string str,double num):name(str),number(num){}
string name;
double number;
};

int main()
{
people a("Jack",123);

cout<<a.name<<a.number;

return 0;

}这样应该行吧..

#3
kisscjy2007-05-24 22:21

原来结构也有构造函数的~~

这我还是第一次听到~~~谢谢了~~

但是我还是不明白为什么定义为string 的时候编译不通过

而当定义为char 时编译就通过呢

#4
aipb20072007-05-24 22:26

楼主你代码完全正确,在dev-cpp和vc++2005下都可以运行.

没有显示定义构造函数的非抽象类,可以用{}显示的初始化,顺序为类成员定义的顺序.

但是在vc6.0中会抱错!估计又找到了个bug!

[此贴子已经被作者于2007-5-24 22:38:48编辑过]

#5
I喜欢c2007-05-24 22:29


楼主,实在不好意思
我没注意你的是结构体
你的代码是正确的
他主要是继承c的.. 你既然用c++,何必用结构体呢?
#6
kisscjy2007-05-24 23:07

哦,谢谢大家的回答~~

原来结构是继承C的,谢谢了~

#7
孤魂居士2007-05-24 23:39
  哥哥 也有不晓得的问题
这问题肯定很难
1