user-0 提问: c结构体这个怎么改，定义后，声明时老是报错

回复:
user: user-0
content: 那个结构体我写在头文件里面，然后调用的时候，没能调用，改了后，我写在了源文件里面，然后就没有报错了。  提问一下，结构体不能写在头文件里面吗？？

user: user-0
content: 错误有点多，没好意思发。。。。 下面是错误； >c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(3): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(3): error C2146: 语法错误: 缺少“;”(在标识符“heros”的前面) 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(4): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(4): error C2146: 语法错误: 缺少“;”(在标识符“jobs”的前面) 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(4): error C2143: 语法错误: 缺少“;”(在“{”的前面) 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(4): error C2447: “{”: 缺少函数标题(是否是老式的形式表?) 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(31): error C2065: “heros”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(31): error C2228: “.id”的左边必须有类/结构/联合 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): error C2065: “heros”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): error C2228: “.name”的左边必须有类/结构/联合 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): error C2065: “heros”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): error C2228: “.sex”的左边必须有类/结构/联合 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(40): error C2065: “jobs”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(40): error C2228: “.name”的左边必须有类/结构/联合 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(44): error C2065: “heros”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(44): error C2228: “.job”的左边必须有类/结构/联合 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(44): error C2065: “jobs”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(45): error C2065: “heros”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(45): error C2228: “.name”的左边必须有类/结构/联合 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(45): error C2228: “.job”的左边必须有类/结构/联合 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): warning C4477: “scanf_s”: 格式字符串“%s”需要类型“char *”的参数，但可变参数 1 拥有了类型“int” 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): note: 此参数由转换说明符使用 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): warning C4473: “scanf_s”: 没有为格式字符串传递足够的参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): note: 占位符和其参数预计 2 可变参数，但提供的却是 1 参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): note: 缺失的可变参数 2 为格式字符串“%s”所需 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(33): note: 此参数用作缓冲区大小 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): warning C4477: “scanf_s”: 格式字符串“%c”需要类型“char *”的参数，但可变参数 1 拥有了类型“int” 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): note: 此参数由转换说明符使用 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): warning C4473: “scanf_s”: 没有为格式字符串传递足够的参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): note: 占位符和其参数预计 2 可变参数，但提供的却是 1 参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): note: 缺失的可变参数 2 为格式字符串“%c”所需 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(35): note: 此参数用作缓冲区大小 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(40): warning C4473: “printf”: 没有为格式字符串传递足够的参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(40): note: 占位符和其参数预计 1 可变参数，但提供的却是 0 参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(40): note: 缺失的可变参数 1 为格式字符串“%s”所需 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(43): warning C4477: “scanf_s”: 格式字符串“%d”需要类型“int *”的参数，但可变参数 1 拥有了类型“int” 1>c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(45): warning C4473: “printf”: 没有为格式字符串传递足够的参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(45): note: 占位符和其参数预计 2 可变参数，但提供的却是 0 参数 1>  c:\users\administrator\documents\visual studio 2015\projects\mysecond\mysecond\hero.cpp(45): note: 缺失的可变参数 1 为格式字符串“%s”所需

user: user-1
content: 我有我的看法。 1、对于代码，我看到的问题是，给结构体赋值Hero.cpp中，没有new空间，应该new出char的空间和new出结构体的空间。 2、你说结构体声明的时候出错了，建议贴出来错误信息哈，更多热能够参与解答，这样有猜测的嫌疑。

user: user-0
content: 什么意思，没看懂

user: user-2
content: char const *

user: user-0
content: Hero heros[5];   好像这一句有问题

user: user-0
content: 看了各位的回复，去改了改，还是有些错误

user: user-3
content: 建议你把结构体初始化写进 inputHero()里试试，而且你的sacnf_s缺少参数， jobChoice设置一个初始值，而且你的heros[i].job = jobs[jobChoice - 1];中的heros[i]后的是不是写错了？  我也是新手，只能帮你的到这了

user: user-4
content: 个人一点看法，在c++中，虽然struct和class差别不大。 在struct中，尽量少用指针，最好用字符数组的形式。这样便于struct的直接赋值。 比如：struct job {     int id;     char name[24];//职业名称     char desc[24]; };用string虽然也可以直接赋值，但在某些场合也麻烦，比如要对struct序列化进行保存到文件或传输到网络的时候，用string也要进一步处理，不如char[]方便。 如果确实需要用指针或者string，还是用class更合理。 因为对struct，总有感觉是可以用memset(&struct, 0, sizeof(struct))这类操作，而不会有人对class这样用。

user: user-5
content: scanf_s("%s", heros[i].name); //换成 scanf_s("%s", heros[i].name, 50);          scanf_s("%c", &heros[i].sex); //换成 scanf_s("%c", &heros[i].sex, 1); scanf_s相比scanf更安全，安全在多一个参数，用于注明缓存的大小；

user: user-6
content: 多学习下