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

Member access into incomplete type error: Templatized struct C++

本文关键字:结构 C++ 错误 访问 类型 成员      更新时间:2023-10-16

C++很新,我第一次尝试模板。我创建了一个结构,treeNode,具有左,右和父指针。我希望树能够存储多种数据类型,因此正在使用模板。每当我尝试在.cpp文件中创建结构的实例,然后使用它来访问树的左/右指针时,我都会收到此错误:成员访问不完整类型的结构"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;
}
  • 首先,由于您声明的是递归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>();
没有

模板参数,treeNode就什么都不是——字面上不是东西

您必须执行以下操作:

treeNode <int> * t;

或类似的东西。

除此之外,您没有设置模板参数,似乎您打错了字。而不是

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;   
};