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

0

Очень новичок в C++ и с моей первой попыткой шаблонов. Я создал struct, 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;
}
Теги:
struct
templates

3 ответа

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>();
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;   
};
0

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

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

treeNode <int> * t;

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню