Ошибка компилятора c ++ при использовании универсального класса, имеющего член структуры - PullRequest
0 голосов
/ 01 апреля 2012

Я создаю общее двоичное дерево, которое включает в себя структуру TreeNode.Я реализую функцию rootPtr (), которая возвращает указатель на корень дерева. binarytree.h это просто следующее:

template <class T>
class BinaryTree {
public:

typedef struct TreeNode {
    T item;
    TreeNode *leftChildPtr; // pointer to left child
    TreeNode *rightChildPtr;

public:
    TreeNode(const T& nodeItem,
            TreeNode *left,
            TreeNode * right)
    : item(nodeItem), leftChildPtr(left), rightChildPtr(right) {
    }

    TreeNode(const T & nodeItem)
    : item(nodeItem) {
        leftChildPtr = NULL;
        rightChildPtr = NULL;
    }
  } TN; //end treenode

//Function prototype
TN* rootPtr() const;

private:
    TN *root;

} //end binarytree

Это фрагмент из binarytree.cpp , который приводит к ошибке.

template <class T>
BinaryTree<T>::TN* BinaryTree<T>::rootPtr() {
    return root;
}

Компилятор жалуется на ошибку : ожидаемый конструктор, деструктор или преобразование типа перед маркером '*' Я видел эту ошибку раньше и обработал ее, используя BinaryTree::, но на этот раз, поскольку она является общей, я не знаю, что мне делать.Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Упрощенное правило: вы не можете определять функции-члены, когда у класса есть шаблон в отдельном файле cpp. Попробуйте поместить это вместе с определением класса в заголовок;)

1 голос
/ 01 апреля 2012

Попробуйте добавить typename перед типом возвращаемого значения в определении функции, поскольку TN является членом зависимого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...