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

程序不能运行,怎么回事?

醒山 发布于 2015-10-19 20:04, 802 次点击
#include<iostream>
#include<string>
struct free_throws
{
    std::string name;
    int made;
    int attempts;
    float percent;
};
void display(const free_throws & ft);
void set_pc(free_throws & ft);
free_throws & accumulate(free_throws & target, const free_throws & source);
int main()
{
    free_throws one = {"Ifelsa Branch",13,14};
    free_throws two = {"Andor Knott",10,16};
    free_throws three ={"Minnie Max ",7,9};
    free_throws four ={"Whily Looper",5,9};
    free_throws five ={"Long Long",6,14};
    free_throws team ={"Throwgoods",0,0};
    free_throws dup;
    set_pc(one);
    display(one);
    accumulate(team,one);
    display(team);
    display(accumulate(team,two));
    accumulate(accumulate(team,three),four);
    display(team);
    dup = accumulate(team,five);
    std::cout<<"Displaying team:\n";
    display(team);
    std::cout<<"Displaying dup after assignment:\n";
    display(dup);
    set_pc(four);
    accumulate(dup,five) = four;
    std::cout<<"Displaying dup after ill-advised assignment:\n";
    display(dup);
    return 0;
}
void display(const free_throws & ft)
{
    using std::cout;
    cout<<"Name: "<<ft.name<<'\n';
    cout<< " Made: "<<ft.made<<'\t';
    cout<< "Attempts: "<<ft.attempts<<'\t';
    cout<<"Percent: "<<ft.percent<<'\n';
}
void set_pc(free_throws & ft)
{
    if(ft.attempts != 0)
        ft.percent = 100.0f *float(ft.made)/float(ft.attempts);
    else
        ft.percent = 0;
}
free_throws & accumulate(free_throws & target,const free_throws & source)
{
    target.attempts += source.attempts;
    target.made += source.made;
    set_pc(target);
    return target;
}
错误信息如下
--------------------Configuration: c3 - Win32 Debug--------------------
Compiling...
c3.cpp
G:\Microsoft Visual Studio\MyProjects\c3\c3.cpp(15) : error C2552: 'one' : non-aggregates cannot be initialized with initializer list
G:\Microsoft Visual Studio\MyProjects\c3\c3.cpp(16) : error C2552: 'two' : non-aggregates cannot be initialized with initializer list
G:\Microsoft Visual Studio\MyProjects\c3\c3.cpp(17) : error C2552: 'three' : non-aggregates cannot be initialized with initializer list
G:\Microsoft Visual Studio\MyProjects\c3\c3.cpp(18) : error C2552: 'four' : non-aggregates cannot be initialized with initializer list
G:\Microsoft Visual Studio\MyProjects\c3\c3.cpp(19) : error C2552: 'five' : non-aggregates cannot be initialized with initializer list
G:\Microsoft Visual Studio\MyProjects\c3\c3.cpp(20) : error C2552: 'team' : non-aggregates cannot be initialized with initializer list
执行 cl.exe 时出错.

c3.obj - 1 error(s), 0 warning(s)
17 回复
#2
yangfrancis2015-10-19 20:28
建立结构体变量时把四个参数输全看成不成。试一试先
#3
yangfrancis2015-10-19 20:29
不是参数,我是说成员
#4
rjsp2015-10-20 08:57
你用的是什么编译器,以及编译器的版本号是多少?
你可以换个正确的编译器试试,因为我怀疑你的编译器有问题,竟然说free_throws是non-aggregates的。
#5
Spy0012015-10-20 10:12
#6
人_神2015-10-20 14:58
free_throws one = {"Ifelsa Branch",13,14};
    free_throws two = {"Andor Knott",10,16};
    free_throws three ={"Minnie Max ",7,9};
    free_throws four ={"Whily Looper",5,9};
    free_throws five ={"Long Long",6,14};
    free_throws team ={"Throwgoods",0,0};
出错的可能原因是 :结构体中float percent没有赋初值,
如free_throws team ={"Throwgoods",0,0};可改成free_throws team ={"Throwgoods",0,0,0.0};
#7
醒山2015-10-20 16:18
我也是这么想的,但试试没有用
#8
wmf20142015-10-20 16:35
好像是string类不能初始化吧
#9
hjx11202015-10-20 16:40
VS2012 与 G++ 4.8.1 均编译通过,楼主的不会是上古时代的编译器吧
#10
醒山2015-10-20 20:27
VC++6.0
#11
醒山2015-10-20 20:29
回复 8楼 wmf2014
不会吧!
#12
hjx11202015-10-20 20:34
我的编译器都可以算是古代的了,楼主的可以说是上古时候的东东的!
#13
醒山2015-10-20 20:35
掌柜,还能不能愉快的玩耍了
#14
hjx11202015-10-20 20:39
我也想用上现代的编译器,可惜太懒,不想更新浪费时间
楼主比我还懒耶
#15
醒山2015-10-20 20:41
你是说换个编译器就好?
#16
hjx11202015-10-20 20:50
至少别太落后了吧!得跟的上时代的脚步才行
至少是不是得支持 C++11什么的编译器
更别说C++14 C++17什么的
#17
我是XXX2016-07-18 16:22
VC++2010
#18
我是XXX2016-07-18 16:23
用的是vc++2010
1