libkdtree ++를 사용하면서 RRT를 구현하려고 노력하고 있습니다.이 라이브러리를 사용하는 방법을 이해하는 데 어려움을 겪고 있습니다. examples 다음, 나는 그런 나의 RRT 클래스의 윤곽을 정의하려고 :std :: ptr_fun 템플릿 클래스 및 struct의 인수 문제
Severity Code Description Project File Line Suppression State
Error C2664 'std::pointer_to_unary_function<trajectory::Point<5>,std::size_t,size_t (__cdecl *)(trajectory::Point<5>)> std::ptr_fun<trajectory::Point<5>,std::size_t>(_Result (__cdecl *)(_Arg))': cannot convert argument 1 from 'double (__cdecl *)(trajectory::Point<c_dim>,std::size_t)' to 'size_t (__cdecl *)(trajectory::Point<5>)' test_RRT C:\ResearchCode\robot-new\robot\projects\RRT\include\RRT.h 83
Error C2512 'std::pointer_to_binary_function<trajectory::Point<5>,std::size_t,double,_Result (__cdecl *)(_Arg1,std::_Arg2)>': no appropriate default constructor available test_RRT C:\ResearchCode\robot-new\robot\externals\libkdtree\kdtree++\kdtree.hpp 126
내가 매우 여기에 입력있어서 제대로하고있어 무엇 : 이것은 다음과 같은 오류를 얻을 수
#pragma once
#include "coupling_tree.h"
#include "kdtree++/kdtree.hpp"
#include <deque>
#include <iostream>
#include <vector>
#include <limits>
#include <functional>
#include <set>
namespace trajectory {
template<int c_dim> struct Point {
std::set<const void*> registered;
Eigen::VectorXd p;
Point(Eigen::VectorXd point) :
p(point)
{
assert(point.size() == c_dim);
}
~Point()
{
bool unreg_ok = (registered.find(this) != registered.end());
assert(unreg_ok);
registered.erase(this);
}
double distance_to(Point const & x) const
{
double dist = 0;
for (int i = 0; i < c_dim; ++i)
dist += (p[i] - x[i])*(p[i] - x[i]);
return std::sqrt(dist);
}
inline double operator[](size_t const N) const { return p(N); }
};
template<int c_dim> double tac(Point<c_dim> p, size_t k) { return p[k]; }
template<int plant_dim, int c_dim>
class RRT { //TODO: Should this be abstract so we can quickly implement lots of RRT variants?
///////TYPEDEFS
typedef Point<c_dim> point;
typedef KDTree::KDTree<c_dim, point, std::pointer_to_binary_function<point, size_t, double> > kd_tree;
////////////VARIABLES
private:
kd_tree tree;
////////////////////
public:
protected:
private:
const int getNumDim() const {
return plant_dim;
}
};
}
특히 ptr_fun을 처음 사용하는 사람들이 이런 방식으로 사용되기 때문에 불만이 특히 많이 발생합니다. 누군가가 오류와 수정 사항을 설명 할 수 있습니까?
Point의 operator []에 템플릿이 있고 클래스 포인트에 이미 템플릿 ....이 있습니다. –
JHBonarius
잘 잡았지만 문제가 변경되지 않습니다. 나는 코드를 편집 할 것이다. 감사! – user650261