Ожидаемый неквалифицированный идентификатор перед «nullptr»

Я пытался внедрить BST, но std::nullptr показывает мне ошибку:

ошибка: ожидается неквалифицированный идентификатор перед «nullptr»

#include <iostream>
#include <memory>

template <typename T>
class BinTreeNode {
public: 
    BinTreeNode(T key): data {key} {
        left = std::nullptr;
        right = std::nullptr; 
    }
    ~BinTreeNode() {}
    T data;
    BinTreeNode<T>* left;
    BinTreeNode<T>* right;
};

template <typename T>
class BinTree {
public:
    BinTree(){ 
        root = std::nullptr;
    }
    ~BinTree() {}
    BinTreeNode<T>* root;
};

int main(){
    BinTree<int> tree;
}

Я попытался найти это в Google, но ничего значимого не нашел, связанного с std::nullptr.


person Community    schedule 23.12.2015    source источник
comment
Пожалуйста, не редактируйте Solved в названиях вопросов. Вместо этого примите ответ, который был вам полезен (щелкните зеленую галочку под количеством полученных голосов).   -  person R_Kapp    schedule 23.12.2015
comment
Почти обман: stackoverflow.com/q/21510121/179910   -  person Jerry Coffin    schedule 23.12.2015


Ответы (1)


nullptr, в отличие от nullptr_t, не требует префикса std::. Причина этого в том, что nullptr является литералом и не определен в пространстве имен std, так же как 42 не определен там. Он также не требует использования каких-либо директив включения.

С другой стороны, nullptr_t — это тип, определенный в пространстве имен std и требующий включения <cstddef>.

person SergeyA    schedule 23.12.2015