struct的一些问题

时间:2016-11-13 14:19:51

标签: c++

#include <iostream>
using namespace std;
struct student{
    char name[10];
    int  grade;
};


int main() {
    struct student s[10];
    student s[0].name = "Jack";
    cout<<s[0].name;
}

我想创建结构类型数据student作为一个arraign。但是,当我这样做时,出现了一些错误,我不知道为什么。以下是错误:

1.error:重新定义&#39;&#39;不同类型:&#39;学生[0]&#39; vs&#39; struct student [10]&#39;

    student s[0].name = "Jack";
            ^

2.note:之前的定义在这里

 struct student s[10];
                ^

3。错误:预期&#39;;&#39;在声明结束时

 student s[0].name = "Jack";
                ^
                ;

1 个答案:

答案 0 :(得分:2)

  1. char name[10];
    1. 10字符对于名称来说太短了。
    2. char假设名称不在ASCII或UTF-8之外,并且看起来您使用的是Unicode库。
    3. 用于存储字符串的固定大小的数组不符合惯用的C ++。
    4. 解决方案:使用std::stringstd::wstring - 并使用Unicode库!
  2. struct student s[10]
    1. 这不是惯用的C ++。 struct关键字是不必要的。只需student s[10];即可。
    2. 同样,除非您确定要使用10条记录,否则请避免使用固定大小的数组。请改用std::vector<student>
    3. 您没有初始化数组,因此数据成员将包含未定义/未初始化的数据。使用= {0}将内存清零和/或定义student构造函数。
  3. student s[0].name = "Jack";
    1. 这不会编译。我想你只想放s[0].name = "Jack"
    2. 没有为字符串定义赋值运算符=(默认情况下)。请注意,您的struct的成员类型为char,而字符串文字为const char[N],因此实际上您将指针(由于Array Decay)分配给char成员。这是一个毫无意义的操作。
  4. 您的main未返回任何值。成功使用return EXIT_SUCCESS;。这不是严格要求的,但我个人认为明确返回值是一种好习惯。