Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于c++;,向量push_back(),我不知道如何填充()_C++_Vector - Fatal编程技术网

C++ 关于c++;,向量push_back(),我不知道如何填充()

C++ 关于c++;,向量push_back(),我不知道如何填充(),c++,vector,C++,Vector,我有一个关于vectorpush\u back()的问题。我正在编写一个代码,以将图像采集到缓冲区并将其存储在vector中。我检查了可能需要使用push\u back(),但我现在不确定如何格式化pImageBuffer以便将其存储到向量中。也许这是另一个简单的问题,但我已经尝试了一个上午,但仍然感到困惑。我希望有人能给我一些提示。提前非常感谢 结果.Buffer()来自camera SDK,它将由StreamGrabber.QueueBuffer更新。我的问题是,无论何时生成,都会出现如下错

我有一个关于
vector
push\u back()
的问题。我正在编写一个代码,以将图像采集到缓冲区并将其存储在
vector
中。我检查了可能需要使用
push\u back()
,但我现在不确定如何格式化
pImageBuffer
以便将其存储到
向量中。也许这是另一个简单的问题,但我已经尝试了一个上午,但仍然感到困惑。我希望有人能给我一些提示。提前非常感谢

结果.Buffer()来自camera SDK,它将由StreamGrabber.QueueBuffer更新。我的问题是,无论何时生成,都会出现如下错误:

std::vector::push_back:“unsigned char*const&”中的参数1 von“const uint8_t*”不可能

我的代码是这样的。

std::矢量图像(100);//这里有一个问题,它需要一个“const”,或者删除const down const uint8\u t*pimagebuff。非常感谢大家的回答!!!
而(1){
....
const uint8_t*pImageBuffer=(uint8_t*)Result.Buffer();//这里我得到了图像数据
image.push_back(pImageBuffer);//这显然是错误的,但我不确定在side()中,我应该怎么做
StreamGrabber.QueueBuffer(Result.Handle(),NULL);
...
}

矢量元素的类型必须与放入其中的对象的类型相同(或至少兼容)

我怀疑错误在于,您正在将类型为
const uint8\u t*
的值推入一个元素类型为
uint8\u t*
的向量中——也就是说,您正在尝试将一个const指针转换为一个非const指针


将向量的类型更改为
std::vector

删除
常量

std::vector<uint8_t *> images;//(100);

while(whateverCondition)
{
   uint8_t *pImageBuffer = (uint8_t *) Result.Buffer();
   images.push_back(pImageBuffer);
}
std::矢量图像//(100);
while(无论如何)
{
uint8_t*pImageBuffer=(uint8_t*)结果。Buffer();
图像。推回(pImageBuffer);
}

确保
Buffer()
函数每次调用时都分配新的缓冲区。

在您的代码示例中,唯一真正错误的是您试图将
常量uint8\u t*
放入
uint8\u t*
的向量中。尝试删除
常量
,看看效果是否更好。

您不需要
(100)
-您需要对
常量保持一致

您有一个
常量uint8\t*
,但您的容器存储
uint8\t*

还要注意的是,您正在添加第100、101、102个元素,而不是填充第0、第1、第2

您可能需要:

std::vector<const uint8_t*> images(100);

size_t i = 0;
while (i < 100) {
  // ..
  const uint8_t* pImageBuffer = (uint8_t*)Result.Buffer();
  images[i++] = pImageBuffer;
  // ..
}
std::vector<const uint8_t*> images;

while (true) {
  // ..
  const uint8_t* pImageBuffer = (uint8_t*)Result.Buffer();
  images.push_back(pImageBuffer);
  // ..
}
std::矢量图像(100);
尺寸i=0;
而(i<100){
// ..
const uint8_t*pImageBuffer=(uint8_t*)Result.Buffer();
图像[i++]=pImageBuffer;
// ..
}
或者您可能需要:

std::vector<const uint8_t*> images(100);

size_t i = 0;
while (i < 100) {
  // ..
  const uint8_t* pImageBuffer = (uint8_t*)Result.Buffer();
  images[i++] = pImageBuffer;
  // ..
}
std::vector<const uint8_t*> images;

while (true) {
  // ..
  const uint8_t* pImageBuffer = (uint8_t*)Result.Buffer();
  images.push_back(pImageBuffer);
  // ..
}
std::矢量图像;
while(true){
// ..
const uint8_t*pImageBuffer=(uint8_t*)Result.Buffer();
图像。推回(pImageBuffer);
// ..
}

或者,只要调用Results.Buffer()分配了一个新的缓冲区,您就可能需要不带
常量的组合,因为您的代码是正确的。如果Results.Buffer()重新使用旧的缓冲区,这将导致问题。您说这显然是错误的。。。这对我来说并不明显。如果您遇到编译错误,请包含错误消息。如果其他方面出了问题,请描述它。一般来说,如果你的问题是“我正在尝试这样做,这是我的代码,但它不起作用。”(话虽如此,我还是尽力回答。)那是不需要考虑的——只有当它是
uint8_t*const
时才会出现这种情况。不,那没关系。看
uint8_t*const
表示“指向uint8_t的常量指针”,如果复制指针,这并不重要
const uint8\u t*
的意思是“指向常量uint8\u t的指针”,如果您将指针传递给其他人,这一点很重要。我的错误-我总是把两者混淆了。@DeadMG不用担心。。。我必须自己查找C++ FAQ来记住。