2016-11-13 55 views
-8
#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作为一个组合。但是当我这样做的时候,出现了一些错误,我不知道为什么。以下是错误:结构的一些问题

1.error:重新定义's'的不同类型:'student [0]'vs'学生结构[10]”

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

2.注意:以前的定义是这里

struct student s[10]; 
       ^

3.错误:预期 ';'在声明

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

是的,这不编译,缺少';' –

+3

什么错误?这很重要。 – Carcigenicate

+2

严重的说明,请使用'strcpy()'。 –

回答

-1
student s[0].name = "Jack"; 

末上面的语句导致错误。

对于C++中的字符串,您不能使用赋值运算符'='。另外,您不需要键入结构名称来访问任何s [x]。 尝试使用strcpy(s[0].name,"Jack");。 Strcpy可在string.h下获得。

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. 字符串没有定义赋值运算符=(默认情况下)。请注意,您的结构的成员类型是char,而字符串文字是const char[N],所以实际上您将分配一个指针(由于数组衰减)到一个char成员。这是一个毫无意义的操作。
  4. 您的main未返回值。成功使用return EXIT_SUCCESS;。这不是严格要求的,但我个人认为明确地返回一个值是很好的做法。
+0

谢谢,伙计。我刚开始学习这些东西,所以我不能真正理解你的一些话。我的英语也不太好,我会尝试更多。再次感谢。 – swaggyp86

+0

关于你的第4点.C++标准实际上保证,如果你在没有返回值的情况下脱离'main'(作为* only *函数)的末尾,那么它返回0--所以这不是一个错误,定义的行为。 –

+0

@JesperJuhl谢谢你指出,我已经更新了我的答案。 – Dai