我遇到了push_back的问题,它不适用于我的代码:(
const int DIM = 10;
vector<char[DIM]> categorie;
int function_1(char cat[DIM]){
categorie.push_back(cat);
return 0;
}
我该如何解决?
谢谢!
PS:我正在使用Eclipse CDT
答案 0 :(得分:3)
这不起作用。 std::vector<T>
要求T
可以复制或移动。普通数组都不是。请注意,在function_1
内,cat
是指向char
的指针,而不是char
的数组。
如果你有C ++ 11,请使用std::array
:
const int DIM = 10;
vector<array<char, DIM>> categorie;
int function_1(array<char, DIM> cat){
categorie.push_back(cat);
return 0;
}
如果你没有,那么你必须将数组包装在一个类中并使用它。当然,Boost.Array可以为你做到这一点。
答案 1 :(得分:1)
由于历史原因,内置数组是相当奇怪的生物,无法按值复制,分配或传递;这使得将它们保存在容器中相当尴尬。尽管有外观,但函数的参数实际上是指针char *
,因此与push_back
所期望的类型不匹配。即使你有一个实际的数组,push_back
也行不通,因为它需要一个可复制的类型。
如果你使用的是C ++ 11,那么std::array<char, DIM>
会更方便。否则,您可以将数组包装在一个小类中并存储它。
答案 2 :(得分:0)
<强> 1 强>
int function_1(char cat[DIM]);
不是你的想法。
它衰败到int function_1(char* cat);
正确的语法是int function_1(char (&cat)[DIM]);
<强> 2 强>
C-array不可复制/可移动,std::vector
至少需要一个。
第3 强>
您最好的选择是使用std::vector<std::array<char, Dim>>
。