Итак, у меня есть следующая функция в заголовочном файле point2D.h:

static VectorXY<T> create_x_y_vectors(const std::vector<Point2D<T>>& point_vector);

Затем в файле point2D.cpp я использую эту функцию следующим образом:

template <typename T> 
static VectorXY<T> create_x_y_vectors(const std::vector<Point2D<T>>& point_vector)
{   

    VectorXY<T> xy_vec;
    size_t vec_length = point_vector.size();

    // Preallocate the vector size
    xy_vec.x.resize(vec_length);
    xy_vec.y.resize(vec_length);

    for(size_t i = 0; i < vec_length; ++i){

        xy_vec.x[i] = point_vector[i].x();
        xy_vec.y[i] = point_vector[i].y();

    }


    return xy_vec;

}

Но когда я компилирую свое рабочее пространство, я получаю следующую ошибку:

неопределенная ссылка на `ASSplinePath :: Point2D :: create_x_y_vectors (std :: vector, std :: allocator>> const &)

Также в конец файла cpp включено следующее:

template class ASSplinePath::Point2D<float>;
template class ASSplinePath::Point2D<double>;

Здесь VectorXY - это структура, которая определена в другом файле заголовка. Поэтому я включил этот файл заголовка в файлы point2D.h и point2D.cpp.

После проверки нескольких ответов на stackoverflow и ошибки я сделал следующее:

template class std::vector<ASSplinePath::Point2D<double>>;
template class std::vector<ASSplinePath::Point2D<float>>;

Но это все равно не решило никаких проблем. Следовательно, я не понимаю, почему существует неопределенная ссылка на эту функцию в .so файле .

Я не знаю, что мне не хватает. Я буквально включил все файлы заголовков из библиотеки, чтобы проверить, работает ли это. Но этого не произошло. Извините, если это глупая ошибка.

Спасибо.

0
y_1234 18 Апр 2020 в 17:10

1 ответ

Лучший ответ

Вы неправильно написали определение функции, оно должно быть

template <typename T> 
VectorXY<T> ASSplinePath::Point2D<T>::create_x_y_vectors(const std::vector<Point2D<T>>& point_vector)
{
    ...
}

В вашей версии определена глобальная функция, которая отличается от функции, объявленной в файле заголовка.

1
john 18 Апр 2020 в 15:08