成员访问不完整类型错误:模板化结构C ++

时间:2013-12-26 18:28:46

标签: c++ templates struct

对C ++很陌生,第一次尝试使用模板。我创建了一个结构treeNode,它有左,右和父指针。我希望树能够存储多种数据类型,因此我正在使用模板。每当我尝试在.cpp文件中创建结构的实例,然后使用它来访问树的左/右指针时,我会收到此错误:成员访问不完整类型struct'treeNode'。对我缺少的东西有任何想法吗?

这是.h文件中的代码(结构定义):

template <class T>
struct treeNode {
    node<T> *l;
    node<T> *r;
    node<T> *p;   
};

这是我在.cpp文件中的尝试:

#include "RedBlack.h"

struct treeNode* t;

Tree::Tree() {
    t->l = NULL;
}

3 个答案:

答案 0 :(得分:2)

  • 首先,由于您要声明递归struct,因此成员应具有相同类型的struct本身。
  • 第二件事:模板不像Java中的泛型。在用真实类型替换类型变量之前,它们不提供真正可用的实现,因此您必须始终使用它们专用或保持某些类型变量仍然在另一个模板上下文中取消选择(例如,下面的Tree类)

由于您希望拥有通用树,因此Tree类也应该是通用的:

template <class T>
struct node {
  node<T> *l;
  node<T> *r;
  node<T> *p;
};

template <class T>
class Tree
{
  private:
    node<T> *root;

  public:
    Tree() : root(nullptr) { }
};

Tree<int> *tree = new Tree<int>();

答案 1 :(得分:0)

treeNode没什么 - 字面意思不是 - 没有它的模板参数。

你必须这样做:

treeNode <int> * t;

或类似的东西。

答案 2 :(得分:0)

除此之外你没有设置模板参数,似乎你写了一个错字。而不是

template <class T>
struct treeNode {
    node<T> *l;
    node<T> *r;
    node<T> *p;   
};

应该是

template <class T>
struct treeNode {
    treeNode<T> *l;
    treeNodeT> *r;
    treeNode<T> *p;   
};