Ошибка доступа к члену в неполном типе: шаблонизированная структура 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;
Или что-то подобное.