我正在尝试从其他重载成员调用重载方法。我收到错误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;
}
看起来好像第一种方法试图在这里调用自己,而不是第二种重载方法。如何强制它使用第二种方法?
答案 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/