Anonymous 发表于 2021-7-23 15:09:42

C++ 结构体数组

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

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

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

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

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

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

      system("pause");
      return 0;
}

下面是报错内容:
error C2440: 'initializing' : cannot convert from 'char ' 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-23 15:17:06

vc6 报错吗?
我这边的 gcc 编译这个代码没问题呀

宇宙可爱兔 发表于 2021-7-23 15:30:12

人造人 发表于 2021-7-23 15:17
vc6 报错吗?
我这边的 gcc 编译这个代码没问题呀

我也感觉没问题,但就是报错,也不知道为什么

yuxijian2020 发表于 2021-7-23 15:34:27

你这到底是在写 C还是在写 C++,看得我莫名其妙的

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

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

写 C 就不要用什么 coutstring

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

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

C++要列表初始化得先有列表初始化构造
真想要列表初始化,请使用 initializer_list
不过,我建议你还是先把C++基础的构造函数写好吧

临时号 发表于 2021-7-24 00:43:16

本帖最后由 临时号 于 2021-7-24 00:45 编辑

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