-2

Я пытаюсь вызвать перегруженный метод из другого перегруженного элемента. Я получаю сообщение об ошибке C2664: Cannot convert argument 2 from std::vector<PK_BODY_T*, std::allocator<_Other>> to PK_BODY_TПерегруженные методы - (Ошибка C2664: невозможно преобразовать из вектора <T> в 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

Что-то не так со мной или вы в самом деле ** ** сделать проход вектором векторов * по значению * ...? –

+1

Для кодовых вопросов у вас должен быть [mcve] – NathanOliver

ответ

-1

Файлы C++ скомпилированы сверху вниз. С точки зрения верхнего метода он не может «видеть» второй метод, потому что он еще не был скомпилирован (поскольку второй метод после первого метода).

Вы должны либо объявить методы в файле .h или в заголовке файла.

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

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

+1

Вы ответили на ваш вопрос через 3 минуты. Почему вы даже опубликовали его вместо поиска решения ** сначала **? –

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); 
    //...