我正在使用ANN库(https://www.cs.umd.edu/~mount/ANN/)。有功能

ANNkdTree::getStats(ANNkdStats &st)

提供kdtree统计信息。图书馆的手册对此功能进行了如下定义:
class ANNkdStats { // stats on kd-tree
public:
   int dim; // dimension of space
   int n_pts; // number of points
   [...]
}

但是,如果遵循函数调用,则只能找到前向声明
class ANNkdStats;

我唯一想做的就是简单使用此功能
ANNkdStats st;
kdTree->getStats(st);

编译器输出如下:
37: error: invalid use of incomplete type ‘class ANNkdStats’
     ANNkdStats *st = new ANNkdStats();

include/ANN/ANN.h:701:7: error: forward declaration of ‘class ANNkdStats’
 class ANNkdStats;    // stats on kd-tree

我不习惯使用前向声明方法,也不知道如何解决它,因为我无法修改该库。

预先感谢您的回答。 :D

最佳答案

ANNkdStats类在ANN/ANNperf.h头文件中定义:

class ANNkdStats {          // stats on kd-tree
public:
    int     dim;            // dimension of space
    int     n_pts;          // no. of points

    // ...

    ANNkdStats()            // basic constructor
    { reset(); }

    void merge(const ANNkdStats &st);   // merge stats from child
};

添加一个
#include "ANN/ANNperf.h"

指令应该足够了(ANNperf.h依次包括ANN.h)。

假设ANN包含目录已经在编译器的搜索路径(g++ -Iinclude_dir)上。

07-24 09:25