【发布时间】:2019-07-13 09:31:33
【问题描述】:
我是编程和 C++ 的初学者。
在 Linux 上编程,我正在创建一个 typedef 结构如下:
typedef struct {
char id[10];
string name[20];
}Employee;
通常,当不使用 struct 时,我会初始化 string char:
char id[10]="ID02093";
string name="Joe";
那么,为什么我不能初始化 Employee 结构的 char id 和 string name 如下?:
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 struct 声明中初始化 typedef struct 元素的 string 和 char 的正确方法是什么?
【问题讨论】:
-
提示:初始化只发生在声明变量的那一行。之后就是分配。
-
这看起来更像 C 而不是(现代)C++。
-
char是单个字符。你可能需要更多的东西来识别员工,所以数组更好但是我还是会为两者都使用 std::string。 -
@PlàcidMasvidal: "
char name[10]是一个字符串" -- 不,不是。这是一个数组。它可能包含字符串。 C 中的 string 定义为“由第一个空字符终止并包括第一个空字符的连续字符序列”。 -
您的问题被标记为 C,但您正在使用 g++(C++ 编译器)进行编译,并且您接受了使用 C++ 特定类型
std::string的答案。它们是两种不同的语言。在 C++ 中,typedef是多余的。在 C 语言中,它也大多是多余的,但如果定义struct Employee { ... },则必须将类型称为struct Employee而不仅仅是Employee。
标签: c++ string struct char typedef