C++如何通过引用将对象的向量传递到一个函数中,然后再传递到下一个函数中

C++ how to pass vector of objects by reference into a function, then into next function?

本文关键字:函数 何通过 一个 然后 下一个 向量 引用 C++ 对象      更新时间:2023-10-16

我希望有人能在这里提供一些帮助。 这是我目前坚持的代码的相关部分:

///////////////////////////////////////////////////////////////////////////////////////////////////
void matchBlobs(std::vector<Blob> &existingBlobs, std::vector<Blob> &currentFrameBlobs) {
    for (auto &existingBlob : existingBlobs) {
        existingBlob.blnCurrentMatchFoundOrNewBlob = false;
    }
    for (auto &currentFrameBlob : 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 &currentFrameBlob, 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函数的原型?