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

这个小程序在VC++6.0中不能通过,在其它DEV-C++通过,请问原因在哪里

sheng124 发布于 2010-08-04 15:34, 677 次点击
#include <iostream>
#include <string>
using namespace std;//头文件
//以下为结构体
struct student
{
    int num;
    string name;
    float score[3];
}stu;

int main()
{
    student stu={1234,"lili",78.5,34,445};
    int a;
    void print(student &);
    print(stu);
    cin>>a;
    return 0;
}
void print(student &stud)
{
    cout<<stud.num<<" "<<stud.name<<" "<<stud.score[0]<<" "<<stud.score[1]<<" "<<stud.score[2]<<endl;
}


在VC中提示student stu={1234,"lili",78.5,34,445};
不对。
2 回复
#2
lintaoyn2010-08-04 18:44
首先student stu={1234,"lili",78.5,34,445};这种形式的初始化是在没有构造函数的情况下才合法。如果我们没有提供初始化函数,且在一个类的数据成员里包含类类型的成员(string name),编译器会隐式的提供一个合成默认构造函数。所以你这样写的是不合法的。我试了下把成员string name 改成 char *name,在VC6里是能通过编译的。
上面的内容你当参考,不同的编译器是会有区别,建议你看下《C++程序设计语言》的第三版里类的部分。


[ 本帖最后由 lintaoyn 于 2010-8-4 18:45 编辑 ]
#3
pangding2010-08-05 00:12
原因就是 vc6.0 不行。楼主可以去看置顶的帖子。
1