错误:期望一个类型,得到'struct'c ++

时间:2011-10-19 11:17:10

标签: c++

我上了一堂课:

template <typename T> 
class btree {

  public:
    btree(size_t maxNodeElems);
    ~btree() {}

    struct node {  
      list <T> elements;
      node *lvl;
    };

  private:
    size_t maxNodeElems;
    node*  root;   

};

template <typename T>
btree<T>::btree(size_t maxNodeElems) {
  if (maxNodeElems > 0) maxNodeElems = maxNodeElems;
  root = new node;
  root->lvl = new node[maxNodeElems+1];
}

template <typename T>
pair <typename btree<T>::iterator, bool> btree <T>::insert (const T& elem) {
  pair <btree<T>::node, bool> start;
  start = addElement (elem, *root);
  pair <typename btree<T>::iterator, bool> final;
  return final;
}

template <typename T>
pair <btree<T>::node, bool> btree<T>::addElement (const T& e, btree<T>::node*& n) {

  n->elements.push_back(e);
  return make_pair(*n, true);
}

它一直给出的错误是:

error:   expected a type, got 'btree::node'
error: invalid type in declaration before ';' token
At global scope:
error: type/value mismatch at argument 1 in template parameter list for 'template<class _T1, class _T2> struct std::pair'
error:   expected a type, got 'btree::node'

这似乎正在线上发生:

pair <btree<T>::node, bool> btree<T>::addElement (const T& e, btree<T>::node*& n) {

我在标题中以相同的方式调用它,我不明白为什么它说我没有给它正确的类型。有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:5)

你必须说:

pair <typename btree<T>::node, bool>
      ^^^^^^^^

这是因为在模板设置中,btree<T>未解析且btree<T>::node依赖名称,您需要消除歧义。

答案 1 :(得分:3)

这是一个非常常见的错误。

typename用作:

pair<typename btree<T>::node, bool> 
     ^^^^^^^^

这是因为node是依赖类型,因为依赖模板参数T

答案 2 :(得分:3)

您需要使用typename告诉编译器依赖名称定义类型:

template <typename T>
pair <typename btree<T>::node, bool> btree<T>::addElement (const T& e, typename btree<T>::node*& n)