Неопределенная ссылка на 'Position <int>:: treeHeight' в конструкторе шаблона класса - PullRequest
1 голос
/ 29 сентября 2019

Я застрял здесь. Я получаю ошибки, которые говорят, что у меня есть неопределенная ссылка только на treeHeight. В конструкторе и в определениях функций-членов, которые используют treeHeight. Могу ли я не иметь статическую переменную в шаблонном классе?

template <class T>    // base element type
class Position        // a node position
{
public:
    Position(const int& HEIGHT) { treeHeight = HEIGHT; }
    PositionList<T> children()   const; // (0) left, (1) duplicate, (2) right
    bool            isRoot()     const { return parent()  == nullptr; }
    bool            isExternal() const { return leftNode  == nullptr 
                                             && rightNode == nullptr; }
    void            incDepth();

    /* Getters */
    T             operator*() const { return data; } // get element
    Position<T> * parent()    const { return parentNode; }
//    Position<T> * duplicate() const { return duplicNode; }
//    Position<T> * left()      const { return rightNode; }
//    Position<T> * right()     const { return leftNode; }
    friend void BTClass<T>::insert(Position<T> *, const T&);

private:
    Position<T> * parentNode {nullptr};
    Position<T> * leftNode   {nullptr}; // Less than parent
    Position<T> * duplicNode {nullptr}; // Equal to parent
    Position<T> * rightNode  {nullptr}; // Greater than parent
    T             data       {T()};
    int           depth      {0};       // Depth of current node within tree. (cannot exceed height)
    static int    treeHeight;
};

1 Ответ

0 голосов
/ 30 сентября 2019

Я понял это! Я объявлял конструктор, но не определял его. Я уже определяю переменные в разделе закрытых переменных, поэтому удаление конструктора позволило компилятору создать собственный конструктор.

...