如何将char * / convert添加到std :: vector <uint8_t []> </uint8_t []>

时间:2015-01-16 10:19:56

标签: c++

我有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*)’ 

1 个答案:

答案 0 :(得分:2)

您有两个问题:

  1. vector的元素必须是可复制构造和可分配的,但数组不是。这意味着你不能合法拥有vector数组。如果您使用的是C ++ 11或更高版本,则可以使用std::vector<std::array<uint8_t, 1115>>std::array类型是数组周围的可复制包装。

  2. push_back只需复制对象即可获取一个可以插入到矢量中的对象。您无法将char*(或任何其他点)复制到数组中。但是,如果您按照我在(1)中的建议,您可以完全避开指针,只需将其设为std::array<uint8_t, 1115> myCharArray;

  3. 如果您无法使用std::array,则可以使用std::vector<std::vector<uint8_t>>,并确保内部向量的大小合适。

    在大多数C ++中查看why you probably won't need raw pointers or new可能会很有趣。