[mlpack] Range search with periodic boundary conditions
Ryan Curtin
ryan at ratml.org
Wed May 13 11:34:23 EDT 2015
On Wed, May 13, 2015 at 11:14:58PM +0800, 董理 wrote:
> Dear Ryan,
>
> I have encountered the following error when compiling my search codes with CoverTree:
>
> /opt/packman/mlpack/1.0.12/0/include/mlpack/methods/range_search/range_search_impl.hpp:245:63: error: implicit instantiation of undefined template
> 'mlpack::tree::CoverTree<geomtk::DomainMetric<geomtk::SphereDomain>, mlpack::tree::FirstPointIsRoot,
> mlpack::tree::EmptyStatistic>::SingleTreeTraverser<mlpack::range::RangeSearchRules<geomtk::DomainMetric<geomtk::SphereDomain>,
> mlpack::tree::CoverTree<geomtk::DomainMetric<geomtk::SphereDomain>, mlpack::tree::FirstPointIsRoot, mlpack::tree::EmptyStatistic> > >'
> typename TreeType::template SingleTreeTraverser<RuleType> traverser(rules);
> ^
> /Users/dongli/Works/lasm/src/AdvectionManager.cpp:206:12: note: in instantiation of member function
> 'mlpack::range::RangeSearch<geomtk::DomainMetric<geomtk::SphereDomain>, mlpack::tree::CoverTree<geomtk::DomainMetric<geomtk::SphereDomain>,
> mlpack::tree::FirstPointIsRoot, mlpack::tree::EmptyStatistic> >::Search' requested here
> search.Search(r, neighbors, distances);
> ^
> …
> /opt/packman/mlpack/1.0.12/0/include/mlpack/core/tree/cover_tree/cover_tree.hpp:212:9: note: template is declared here
> class SingleTreeTraverser;
> ^
> 1 error generated.
>
>
> The metric class is defined in my codes as:
>
> template <class DomainType>
> class DomainMetric {
> public:
> static const DomainType *domain;
>
> DomainMetric() {}
>
> template <typename VecType1, typename VecType2>
> static double
> Evaluate(const VecType1 &x, const VecType2 &y) {
> return domain->calcDistance(x, y);
> }
>
> string
> ToString() const {
> return "Implement me!”;
> }
> }; // DomainMetric
>
> template <class DomainType>
> const DomainType* DomainMetric<DomainType>::domain = NULL;
>
> And I define the RangeSearch template as
>
> typedef geomtk::DomainMetric<typename Mesh::DomainType> MetricType;
> typedef mlpack::tree::CoverTree<MetricType> TreeType;
> typedef mlpack::range::RangeSearch<MetricType, TreeType> SearchType;
>
> Any idea? Thanks in advance!
My first guess is that you're including
src/mlpack/core/tree/cover_tree/cover_tree.hpp, when really you should
include src/mlpack/core/tree/cover_tree.hpp, which then includes
everything else associated with the cover tree.
Probably the right thing to do on the mlpack side is to make sure that
cover_tree.hpp includes everything that it needs...
--
Ryan Curtin | "What? Facts?"
ryan at ratml.org | - Joe Cairo
More information about the mlpack
mailing list