Проблемы со структурами и тесты с catch2 - PullRequest
0 голосов
/ 27 апреля 2020

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

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

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

template <typename T> 
VectorXY<T> ASSplinePath::Point2D<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;

}

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

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

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

template <typename T> struct VectorXY {

    std::vector<T> x;
    std::vector<T> y;
};

Здесь point_vector происходит из другого класса точек.

Чтобы проверить эту функцию, я написал следующий тест со стилями catch2 и BDD.

SCENARIO("Creating x and y vectors from a vector of Point2D")
{
    GIVEN("A Vector of Point2D<double> object")
    {

        std::vector<Point2D<double>> points;

        Point2D<double> point_1(1.0, 2.0);
        Point2D<double> point_2(-3.0, 4.0);
        Point2D<double> point_3(5.0, -6.0);

        points.push_back(point_1);
        points.push_back(point_2);
        points.push_back(point_3);

        VectorXY<double> xy_vec;

        WHEN("Creating x and y vectors")
        {

            xy_vec.create_x_y_vectors(points);


            THEN("x and y vector should be returned")
            {

                REQUIRE(xy_vec.x == Approx(1.0, -3.0, 5.0));
                REQUIRE(xy_vec.y == Approx(2.0, 4.0, -6.0));
            }
        }

    }
}

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

ошибка : «struct ASSplinePath :: VectorXY» не имеет члена с именем «create_x_y_vectors» xy_ve c .create_x_y_vectors (points);

error : для соответствия нет функции вызов 'Catch :: Detail :: Approx :: Approx (double, double, double)' REQUIRE (xy_ve c .x == Approx (1.0, -3.0, 5.0));

Я должен добавить, когда я закомментирую этот тест, то все будет хорошо. Следовательно, я предполагаю, что здесь что-то не так. Следовательно, я не совсем уверен, что означает эта ошибка. Буду очень признателен за вашу помощь. Спасибо.

1 Ответ

0 голосов
/ 01 мая 2020

Итак, я наконец понял, в чем проблема. Если кто-то сталкивается с вопросом подобного типа, убедитесь, что функция объявлена ​​в структуре или объявлена ​​в каком-то другом классе. В моем случае сработало следующее:

xy_vec = Point2D<double>().create_x_y_vectors(points);

create_x_y_vectors () было определено в классе Point2D и, следовательно, необходимо было создать объект Point2D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...