Ошибка доступа к члену в неполном типе: шаблонизированная структура C++

Довольно плохо знаком с 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 ответа

Решение
  • Прежде всего, так как вы объявляете рекурсивный 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>();

Кроме того, вы не установили аргумент шаблона, похоже, вы сделали опечатку. Вместо

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

treeNode ничего - буквально не вещь - без параметров шаблона.

Ты должен сделать:

treeNode <int> * t;

Или что-то подобное.

Другие вопросы по тегам