[英]Why can't I initialize a typedef struct string or char as normally?
我是編程和C ++的初學者。
在Linux上進行編程,我正在創建一個typedef結構,如下所示:
typedef struct {
char id[10];
string name[20];
}Employee;
通常,當不使用struct時,我將字符串char初始化為:
char id[10]="ID02093";
string name="Joe";
因此,為什么不能按如下所示初始化Employee結構的char id和字符串名稱?:
Employee salesManager;
salesManager.id="ID02093";
salesManager.name="Joe";
我從g ++編譯器收到此錯誤:
“在將'const char [8]'分配給'char [9]'salesManager.id =“ ID02093”時不兼容的類型;” 將'const char [4]'分配給'std :: __ cxx11 :: string [20] {aka std :: __ cxx11 :: basic_string [20]}'salesManager.name =“ Joe”;中的類型不兼容
從typedef結構聲明中初始化typedef結構元素的字符串和char的正確方法是什么?
初始化和賦值是兩個截然不同(但相似)的事物。
您可以通過在聲明/定義數組時為其提供值來初始化數組。
您不能分配給數組。
您可以使用memcpy
或strcpy
將值復制到數組中:
char name[20];
strcpy(name, "Test";
但是出於您的目的,您可以將數組初始化為結構初始化的一部分:
typedef struct {
char id[10];
char name[20];
} Employee;
Employee salesManager = {
"A12345678",
"Test"
};
/* OR */
Employee salesManager = {
.id = "A12345678",
.name = "Test"
};
由於您在問的是C ++而不是C,因此最好使用std::string
而不是原始字符數組。 std::string
更加靈活:您可以將值(包括字符串文字)分配給std::string
對象。
我認為在兩種情況下都應使用字符串,並使用OOP而不是typedef。 但是嘗試下面的代碼,應該可以正常工作:
#include <iostream>
using namespace std;
typedef struct {
string id;
string name;
} Employee;
int main() {
Employee salesManager;
salesManager.id = "A12345678";
salesManager.name = "Test";
cout << "Id: " << salesManager.id << endl;
cout << "Name: " << salesManager.name << endl;
return 0;
}
char
數組 考慮這一行:
salesManager.id="ID02093";
允許使用字符串文字初始化char
數組,這是從C繼承的C ++語法所允許的一種方便。但是,不允許將賦值與數組一起使用。 這就是為什么出現此錯誤的原因:
incompatible types in assignment of 'const char [8]' to 'char [9]' salesManager.id="ID02093";
相反,您必須將數據復制到陣列中。
string
數組 考慮這條線
salesManager.name="Joe";
失敗的原因是因為您還聲明了name
為數組。
typedef struct { char id[10]; string name[20]; }Employee;
這說明了為什么出現此錯誤:
incompatible types in assignment of 'const char [4]' to 'std::__cxx11::string [20] {aka std::__cxx11::basic_string [20]}' salesManager.name="Joe";
您可能並不打算將name
聲明為數組。
賦予匿名類類型的typedef
名稱與類名稱的語義略有不同。 由於區別很棘手,因此如果類本身不包含匿名類,則最好避免使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.