ANN 库中的前向声明

Forward declaration in ANN Library

我正在使用 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 class 定义在 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)。