【发布时间】:2018-09-16 09:12:00
【问题描述】:
最初我开始尝试在声明时使用初始化列表初始化 const char*[3] 向量
vector<const char*[3]> v = { { "a", "b", "c" } };
这给出了错误
matrix must be initialized with a brace-enclosed initializer
我认为可能是由于 const char*,虽然它看起来很奇怪,并将其更改为字符串
vector<string[3]> v = { { "a", "b", "c" } };
但错误仍然存在。我尝试了几种牙套组合均无济于事。是否真的可以在声明时使用初始化列表初始化这个结构?
【问题讨论】:
-
向量的目的是什么?你想要一个包含三个单个字符串元素的向量(即
std::vector<std::string>)吗?或者你想要一个向量,其中每个元素都是三个字符串的数组(即std::vector<std::array<std::string, 3>>)? -
我没有真正的答案,但 C 数组在 C 和 C++ 类型系统中最多是二等公民,所以如果大多数花哨的东西不起作用,请不要感到惊讶跟他们。试试
std::array。 -
@Someprogrammerdude 我实际上想要第二个选项,一个包含 3 个 const char*/string 元素的数组的向量。我也在考虑使用 std::array (并有其他解决方案),但仍然想知道为什么这是不可能的,或者它是否真的可能但我不知道该怎么做。
-
如果你可以使用
std::array而不是std::vector,它将编译std::array<const char*[3], 1> v = { { "a", "b", "c" } }; -
您忘记指定给出该错误的编译器和版本。我从未见过这样的错误。什么是“矩阵”?