The following class returns the following error from g++:
tree.h:9: error: expected unqualified-id before 'template'
If line 5 is uncommented, the same error occurs, only at line 5.
Am I missing an obvious syntax error here from staring at this too long? Or am I improperly declaring the template class?
#ifndef TREE_H
#define TREE_H
//template <typename T, typename P, typename C> class kdtree_t;
//Kdtree class
template <typename T, typename P, typename C>
class kdtree_t{
private:
struct node_t
{
P data;
T min, max;
node_t *left, *right;
int axis;
node_t(const P& d = 0, const T& in = 0,
const T& ix = 0, node_t *l = NULL,
node_t * r = NULL, int a = 0)
: data(d), min(in), max(ix),
left(l), right(r), axis(a) {}
};
public:
void nn(T& q, P& t, double radius)
{
nn(root, q, t, radius);
}
void insert(std::vector<P>& x, const T& min, const T& max)
{
root = insert(root, x, min, max, 0);
}
void knn(T& q, std::vector<P> vec, double r, int k)
{
knn(root, q, vec, r, k);
}
void range(T& min, T& max, std::vector<P> irange)
{
this->range(root, min, max, irange);
}
void clear()
{
clear(root);
}
private:
void nn(node_t* &,T&,P&,double&);
void knn(node_t* &,T&,std::vector<P>&,double&,int);
void range(node_t* &,const T&,const T&,std::vector<P>&);
void clear(node_t* &);
node_t* clone(node_t* ) const;
node_t* root;
node_t* insert(node_t * &, std::vector<P>&, const T&, const T&, int);
};
#endif
You're template code is correct, but the code that comes before it (likely in another header) is not. Check to make sure your class definitions in other headers have semi-colons after them.
class x // no semi-colon here causes same error!
template <typename T, typename P, typename C>
};
int main() {
}