错误:需要类型,'struct' C++

error: expected a type, got 'struct' c++

本文关键字:struct C++ 类型 错误      更新时间:2023-10-16

我有一个class:

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) {

我用同样的方式在header中调用它,我不明白为什么它说我没有给它正确的类型。有人能给我解释一下吗?

你必须说:

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

这是因为在模板设置中,btree<T>是未解析的,而btree<T>::node是与相关的名称,因此需要消除歧义。

这是个很常见的错误。

使用typename作为:

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

这是因为node是一个依赖类型,因为它依赖于模板参数T

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

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