重载方法 - (错误C2664:无法从vector <t>转换为T)

时间:2015-08-17 18:40:45

标签: c++ header-files overloading forward-declaration

我正在尝试从其他重载成员调用重载方法。我收到错误C2664: Cannot convert argument 2 from std::vector<PK_BODY_T*, std::allocator<_Other>> to PK_BODY_T

代码:

std::vector<PK_BODY_t*> FillHoles(std::vector<std::vector<PK_EDGE_t>> holes, PK_BODY_t inputBody)
{
    std::vector<PK_BODY_t*> vectorBodies;
    PK_BODY_t *pointerInputBody = new PK_BODY_t(inputBody);
    vectorBodies.push_back(pointerInputBody);

    std::vector<PK_BODY_t*> returnVector;
    returnVector = FillHoles(holes, vectorBodies);  //<-- ERROR HERE. Calling overloaded method.

    delete pointerInputBody;
    return returnVector;
}

/* overloaded version of FillHoles 
*/
std::vector<PK_BODY_t*> FillHoles(std::vector<std::vector<PK_EDGE_t>> holes,     std::vector<PK_BODY_t*> inputBody)
{
    //...

    std::vector<PK_BODY_t*> fillHoleOutput = FillOneHole(currentBody, currentHole);

    return fillHoleOutput;
}

看起来好像第一种方法试图在这里调用自己,而不是第二种重载方法。如何强制它使用第二种方法?

2 个答案:

答案 0 :(得分:0)

您没有显示函数的声明方式以及一个函数是否隐藏其他函数的范围。

但无论如何只需在第一个重载函数

中声明第二个重载函数
std::vector<PK_BODY_t*> FillHoles(std::vector<std::vector<PK_EDGE_t>> holes, PK_BODY_t inputBody)
{
    std::vector<PK_BODY_t*>  FillHoles(std::vector<std::vector<PK_EDGE_t>> holes, std::vector<PK_BODY_t*> inputBody);
    //...

答案 1 :(得分:-1)

C ++文件从上到下编译。从顶级方法的有利位置来看,它无法看到&#39;第二种方法,因为它尚未编译(因为第二种方法是在第一种方法之后)。

您必须在头文件.h文件中声明方法,或者转发声明.cpp文件顶部的方法。

http://www.learncpp.com/cpp-tutorial/19-header-files/

http://www.learncpp.com/cpp-tutorial/17-forward-declarations/