2016-11-13 74 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