【发布时间】:2020-01-08 09:28:11
【问题描述】:
我正在尝试初始化结构向量,但出现编译错误。
就我的理解而言,当 struct 包含简单的数据类型(如 int、float 等)时,初始化 struct 的向量很容易,但如果我里面有多个 char 数组怎么办?
#include <vector>
/// this compiles without any problem:
typedef struct TEST_TYPE_A
{
int a;
int b;
int c;
int d;
};
std :: vector <TEST_TYPE_A> TEST_A =
{
{1,2,1,2},
{4,5,6,4},
{7,8,8,9},
{0,1,10,11},
{3,4,99,200}
};/// so far good, no compilation error
/// this variant fails
typedef struct TEST_TYPE_B
{
int a;
int b;
char txt1[10];
char txt2[3];
};
std :: vector <TEST_TYPE_B> TEST_B =
{
{1,2,"1010101111","ABC"},
{4,5,"1010101111","ABC"},
{7,8,"1010101111","ABC"},
{0,1,"1010101111","ABC"},
{3,4,"1010101111","ABC"}
}; /// i get compilation error here
编译错误:
error: could not convert '{{1, 2, "1010101111", "ABC"}, {4, 5, "1010101111", "ABC"}, {7, 8, "1010101111", "ABC"}, {0, 1, "1010101111", "ABC"}, {3, 4, "1010101111", "ABC"}}' from '<brace-enclosed initializer list>' to 'std::vector<TEST_TYPE_B>'
我在这里看到了类似的问题,string 类型而不是 char[NUM] 数组似乎正在工作。我知道,由于我正在初始化数组,因此需要一些特殊处理,但我不知道如何尽可能简单地做到这一点。我不会假装我受过足够的教育,只是问有什么问题,我该如何解决?
我正在使用 GCC 5.1 和 C++11。
【问题讨论】:
-
"ABC"是一个const char[4](有一个最终的\0),所以,与char txt2[3]不兼容。 -
你的
typedefs 是多余的 -
你为什么不使用
std::string?顺便说一句,不要写std :: vector,除此之外,当你想找到std::vector时,它会杀死任何搜索功能@ -
@jarod42 谢谢,这是一个错字。我试图创建问题的简单示例。但问题仍然存在。
-
带有
ALL_CAPITAL_LETTERS的标识符(如TEST_TYPE_A)通常用于宏。