2011-11-18 53 views
1

以下類從克++返回以下錯誤:模板類宣言KDTree

tree.h:9: error: expected unqualified-id before 'template'

如果線5未被註釋,發生相同的誤差,僅在第5行

我缺少一個明顯的語法錯誤在這裏盯着這太久了?或者我不正確地宣佈模板類?

#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 

回答

1

你是模板代碼是正確的,但它之前的代碼(可能在另一個頭文件中)不是。檢查以確保其他標題中的類定義在它們之後具有分號。

class x // no semi-colon here causes same error! 

template <typename T, typename P, typename C> 
}; 

int main() { 
} 
+1

太多的注視是反生產。謝謝。 – jscott