C++如何通过引用将对象的向量传递到一个函数中,然后再传递到下一个函数中
C++ how to pass vector of objects by reference into a function, then into next function?
我希望有人能在这里提供一些帮助。 这是我目前坚持的代码的相关部分:
///////////////////////////////////////////////////////////////////////////////////////////////////
void matchBlobs(std::vector<Blob> &existingBlobs, std::vector<Blob> ¤tFrameBlobs) {
for (auto &existingBlob : existingBlobs) {
existingBlob.blnCurrentMatchFoundOrNewBlob = false;
}
for (auto ¤tFrameBlob : currentFrameBlobs) {
int intIndexOfLeastDistance = 0;
double dblLeastDistance = 1000000.0;
for (unsigned int i = 0; i < existingBlobs.size() - 1; i++) {
if (existingBlobs[i].blnStillBeingTracked == true) {
double dblDistance = distanceBetweenBlobs(currentFrameBlob, existingBlobs[i]);
if (dblDistance < dblLeastDistance) {
dblLeastDistance = dblDistance;
intIndexOfLeastDistance = i;
}
}
}
if (dblLeastDistance < currentFrameBlob.dblDiagonalSize * 1.5) {
addBlobToExistingBlobs(currentFrameBlob, existingBlobs, intIndexOfLeastDistance); // !!!! compiler error for 2nd arg on this line !!!!!!!
} else {
addNewBlob(currentFrameBlob, existingBlobs);
}
}
for (auto &existingBlob : existingBlobs) {
if (existingBlob.blnCurrentMatchFoundOrNewBlob == false) {
existingBlob.blnStillBeingTracked = false;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void addBlobToExistingBlobs(Blob ¤tFrameBlob, std::vector<Blob> &existingBlobs, int &intIndex) {
existingBlobs[intIndex].contour = currentFrameBlob.contour;
existingBlobs[intIndex].boundingRect = currentFrameBlob.boundingRect;
existingBlobs[intIndex].ptCurrentCenter = currentFrameBlob.ptCurrentCenter;
existingBlobs[intIndex].dblDiagonalSize = currentFrameBlob.dblDiagonalSize;
existingBlobs[intIndex].dblAspectRatio = currentFrameBlob.dblAspectRatio;
existingBlobs[intIndex].vectorOfAllActualPoints.push_back(currentFrameBlob.ptCurrentCenter);
existingBlobs[intIndex].blnStillBeingTracked = true;
existingBlobs[intIndex].blnCurrentMatchFoundOrNewBlob = true;
}
如代码中的注释所述,我在此行收到编译器错误:
addBlobToExistingBlobs(currentFrameBlob, existingBlobs, intIndexOfLeastDistance); // !!!! compiler error for 2nd arg on this line !!!!!!!
错误是:
Error C2664 'void addBlobToExistingBlobs(Blob &,Blob &,int &)': cannot convert argument 2 from 'std::vector<Blob,std::allocator<_Ty>>' to 'Blob &' ObjectTrackingCPP c:userscdahmsdocumentsvisual studio 2015projectsobjecttrackingcpp2objecttrackingcpp.cpp 186
谁能说明我在这里做错了什么? 我可以找到很多通过引用传递一个基本数据类型变量(int、double 等)C++示例,但我找不到任何涉及将对象向量传递到一个函数中,然后再传递到另一个函数中的示例。
我使用的是Visual Studio 2015社区附带的编译器,如果这有所作为,请选择默认选项。
我不确定要往哪个方向走,任何帮助将不胜感激。
从错误消息来看,编译器知道您的函数为
void addBlobToExistingBlobs(Blob&, Blob&, int&);
鉴于,在您的实现
void matchBlobs(std::vector<Blob>&, std::vector<Blob>&);
使用名称为 addBlobToExistingBlobs
的函数,但具有不同的原型,即
void addBlobToExistingBlobs(Blob& ,std::vector<Blob>&, int&);
您是否检查过,在您的代码中的某个地方,您没有另一个让编译器感到困惑的addBlobToExistingBlobs
函数的原型?
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 在 const 函数中通过引用和指针返回之间的区别
- Lapack函数DGTSV通过C /Visual Studio提供未解决的外部符号
- 编写一个函数,该函数将通过判断其每个参数的类型来自动确定其返回值
- 包含仅移动类型的类的构造函数应通过引用还是通过右值引用接收仅移动类型?
- 是否有一种方法可以始终通过值(制作副本)而不是在使用类成员函数时通过参考来传递
- 没有返回类型的静态函数可以通过Windows上的编译,但不能传递Linux上的编译
- Boost Python:在函数中通过引用传递变量时出错
- 函数重载通过返回常量和不返回常量
- 为什么int不需要是常量和/或在函数中通过引用传递
- 在 c++11 中,虚函数能否通过移动语义有效地返回大值
- 我应该通过值传递std::函数还是通过(rvvalue)-引用传递函数
- 如何在非布尔函数中通过引用传递布尔变量
- 使用 cin 在函数中通过引用传递 2 个值时出现问题
- 为什么类构造函数在通过复制初始化对象时不起作用
- 为什么 const 成员函数能够通过成员指针调用非 const 成员函数
- 使用变量参数映射函数并通过字符串 c++ 调用
- 复制构造函数并通过跟踪对象移动语义
- Constexpr 成员函数在通过引用访问时返回不被视为 constexpr 的模板参数
- 为什么我们需要一个默认构造函数来通过引用传递对象C++