关于给结构体数组赋值时的一个错误

MoniMoni_gdd 2016-12-05 02:09:30
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2679 二进制“=”: 没有找到接受“initializer list”类型的右操作数的运算符(或没有可接受的转换

//我是在头文件里定义的结构 student
struct student
{
char name[20];
char codeForStudent[20];
char studentId[11];
int classes[20] = { 0 };
};
struct course
{
char coursename[20];
int numberOfStudent;
int selectedStudent;
};
student stu[30];
course courses[20];
int main()
{
stu[0] = { "AbcDefg", "iloveit", "1234567890", {0}}; // 这一行错误,错误类型见上文
courses[0] = {"数学", 100, 0}; // 这一行就没有错误
//后文省略。。。。
}
请问各位这是为什么?看了一些其他的帖子并不懂什么叫“重载”。。。能简明说一下为什么会出错吗?以及,怎么改?谢谢啦
...全文
787 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoniMoni_gdd 2017-05-11
  • 打赏
  • 举报
回复
抱歉,这是我去年遇到的一个问题,到现在才找回账号和密码……问题已解决,谢谢大家!
ri_aje 2016-12-07
  • 打赏
  • 举报
回复
改用支持 c++17 的编译器就没问题了。 类类型最好通过构造函数初始化。 主楼的例子里 {0} 那部分没有必要,因为类内部已经初始化 classes 了。
赵4老师 2016-12-06
  • 打赏
  • 举报
回复
“变量赋值”和“变量初始化”不是一回事! “变量赋值”发生在运行期,其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。
paschen 版主 2016-12-06
  • 打赏
  • 举报
回复
只有结构体变化初始化时才可以用 = {...} 这种语法 为一个已经存在的对象赋值,你只能一个元素一个元素进行赋值
xskxzr 2016-12-06
  • 打赏
  • 举报
回复
courses[0] = {"数学", 100, 0}; // 这一行就没有错误 这一行本应也通不过编译的。你能通过可能是因为奇怪的编译器扩展。
小灸舞 2016-12-05
  • 打赏
  • 举报
回复
只有声明的时候直接初始化才能那么写
ID870177103 2016-12-05
  • 打赏
  • 举报
回复
如果一个类型是‘平凡的类型’(POD类型) 那么编译器才会尝试将一个初始化列表转为该类型 否则编译器将会寻找接受initializer_list型的构造函数 如果编译器没有找到合适的构造函数 就会给出无法将一个initializer_list转为该类型 算数类型,指针等都是平凡类型 对于一个结构来说,满足下面条件算作平凡的类型 1。所有成员都是平凡的类型 2。没有虚函数虚基类 3。构造函数和operator=是默认的 对于模板,可以使用std::is_pod检查是否平凡的类型 这些去百度更好
flying_music 2016-12-05
  • 打赏
  • 举报
回复
结构体对象不能这么赋值的,最好写个函数来完成这件事
#include <string.h>

struct student
{
char name[20];
char codeForStudent[20];
char studentId[11];
char classes[20];
};

struct student stu[30];



void initStudent(struct student *pStu, const char *pName, const char *pCode, const char *pId, const char *pClass)
{
	strcpy(pStu->name, pName);
	strcpy(pStu->codeForStudent, pCode);
	strcpy(pStu->studentId, pId);
	strcpy(pStu->classes, pClass);
}
int main()
{
	initStudent(&stu[0],  "AbcDefg", "iloveit", "1234567890", "0");  // 这一行错误,错误类型见上文
}
  • 打赏
  • 举报
回复
结构体里不用自己初始化吧。系统自动初始化。结构体的数组定义就好了不用自己初始化。你去掉{0}试试

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧