鱼C论坛

 找回密码
 立即注册
查看: 1307|回复: 4

[已解决]C++ 结构体数组

[复制链接]
匿名鱼油
匿名鱼油  发表于 2021-7-23 15:09:42 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想请问各位大佬下面这段代码在Visual C++ 6.0运行不出来是错在哪里?报错也看不太懂

#include <iostream>
using namespace std;
#include <string>

struct Student
{
        string name;
        int age;
        int scores;
};

int main()
{
    struct Student arr[3] =
        {
                {"张三",20,100},
                {"李四",30,90},
                {"王五",40,80}
        };

        arr[1].name = "赵六";
        arr[1].age = 50;
        arr[1].scores = 70;

        for (int i = 0; i < 3; i++)
        {
                cout << "姓名:" << arr[i].name
                       << "年龄:" << arr[i].age
                       << "分数:" << arr[i].scores << endl;
    }

        system("pause");
        return 0;
}

下面是报错内容:
error C2440: 'initializing' : cannot convert from 'char [7]' to 'struct Student'
No constructor could take the source type, or constructor overload resolution was ambiguous
error C2440: 'initializing' : cannot convert from 'const int' to 'struct Student'
No constructor could take the source type, or constructor overload resolution was ambiguous
error C2440: 'initializing' : cannot convert from 'const int' to 'struct Student'
No constructor could take the source type, or constructor overload resolution was ambiguous
fatal error C1903: unable to recover from previous error(s); stopping compilation
执行 cl.exe 时出错.
最佳答案
2021-7-24 00:43:16
本帖最后由 临时号 于 2021-7-24 00:45 编辑

你的错误在于Student这个结构中定义了string类型的成员,从而导致了不能用initializer list 进行初始化;string是std的定义的一个容器,从它的实现上看它含有一个保护成员,所以string不能用initializer list 进行初始化;所以你的程序出错了。当然,你的VC6.0太老了,我在Dev C++ 上编译就没问题
回复

使用道具 举报

发表于 2021-7-23 15:17:06 | 显示全部楼层
vc6 报错吗?
我这边的 gcc 编译这个代码没问题呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-23 15:30:12 | 显示全部楼层
人造人 发表于 2021-7-23 15:17
vc6 报错吗?
我这边的 gcc 编译这个代码没问题呀

我也感觉没问题,但就是报错,也不知道为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-23 15:34:27 | 显示全部楼层
你这到底是在写 C  还是在写 C++,看得我莫名其妙的

说你在写 C 吧   你这又是 namespace  又是 cout 的
说你在写 C++ 吧,没看懂你这写的是个啥

请问你到底是要写 C 还是写 C++?

写 C 就不要用什么 cout  string

写 C++ 我就笑了
谁告诉你可以这么赋值的?
struct Student arr[3] =
        {
                {"张三",20,100},
                {"李四",30,90},
                {"王五",40,80}
        };

不要觉得 C++ 真的就只是 C 的超集,C++的坑多着呢

C++要列表初始化得先有列表初始化构造
真想要列表初始化,请使用 initializer_list
不过,我建议你还是先把C++基础的构造函数写好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-24 00:43:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 临时号 于 2021-7-24 00:45 编辑

你的错误在于Student这个结构中定义了string类型的成员,从而导致了不能用initializer list 进行初始化;string是std的定义的一个容器,从它的实现上看它含有一个保护成员,所以string不能用initializer list 进行初始化;所以你的程序出错了。当然,你的VC6.0太老了,我在Dev C++ 上编译就没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表