我有std::vector<uint8_t[1115]>
,我想在其中存储char*
。
我不明白如何将char *转换为适合它的向量。
也许它很愚蠢,但我试过这个:
char* myCharArray = new char[1115];
std::vector<uint8_t[1115]> myVector;
myVector.push_back(reinterpret_cast<uint8_t*>(myCharArray));
我不明白为什么这不起作用。错误如下:
error: no matching function for call to ‘std::vector<unsigned char [1115]>::push_back(uint8_t*)’
答案 0 :(得分:2)
您有两个问题:
vector
的元素必须是可复制构造和可分配的,但数组不是。这意味着你不能合法拥有vector
数组。如果您使用的是C ++ 11或更高版本,则可以使用std::vector<std::array<uint8_t, 1115>>
。 std::array
类型是数组周围的可复制包装。
push_back
只需复制对象即可获取一个可以插入到矢量中的对象。您无法将char*
(或任何其他点)复制到数组中。但是,如果您按照我在(1)中的建议,您可以完全避开指针,只需将其设为std::array<uint8_t, 1115> myCharArray;
。
如果您无法使用std::array
,则可以使用std::vector<std::vector<uint8_t>>
,并确保内部向量的大小合适。
在大多数C ++中查看why you probably won't need raw pointers or new
可能会很有趣。