私はC++でテンプレートを使用してプログラムを作成していますが、なぜコンパイルできないのか分かりません。"は、引数1を 'Node <T>'から 'std :: nullptr_t'に変換できません。
template<typename T>
class Node {
friend class Tree<T>;
public:
using nodePtr = std::shared_ptr<Node<T>>;
Node(T value):
nodeValue(value),
leftSon(Node()),
rightSon(Node()),
isEmpty(false) {
}
Node(T value, nodePtr left, nodePtr right):
nodeValue(value),
leftSon(left),
rightSon(right),
isEmpty(false) {
}
Node():
nodeValue(T()),
leftSon(nullptr),
rightSon(nullptr),
isEmpty(true) {
}
Node(nodePtr root):
nodeValue(root->nodeValue),
leftSon(root->leftSon),
rightSon(root->rightSon),
isEmpty(root->isEmpty) {
}
Node(const nodePtr& copied):
nodeValue(copied.nodeValue),
leftSon(copied.leftSon),
rightSon(copied.rightSon),
isEmpty(copied.isEmpty) {
}
private:
T nodeValue;
nodePtr leftSon;
nodePtr rightSon;
bool isEmpty;
};
とツリー::
私はクラスのノードを持っている私は、main関数内
Tree<int>::createValueNode(7);
を使用している場合は
template<typename T>
class Tree {
using nodePtr = std::shared_ptr<Node<T>>;
nodePtr root;
public:
static nodePtr createEmptyNode() {
return std::make_shared<Node<T>>();
}
static nodePtr createValueNode(T value) {
return std::make_shared<Node<T>>(value);
}
static nodePtr createValueNode(T value, nodePtr left, nodePtr right) {
return std::make_shared<Node<T>>(value, left, right);
}
};
、Visual Studioのコンパイラはエラーで終了します。
C2664
'std::shared_ptr<Node<T>>::shared_ptr(std::shared_ptr<Node<T>> &&) noexcept':
cannot convert argument 1 from 'Node<T>' to 'std::nullptr_t'
どのコンパイラを使用しますか? –
< Nodeを書くようにしてください - > –
の間にスペース記号を追加してください私はどのデバッガであるのか分かりません。オプションについては、「起動するデバッガ:ローカルWindowsデバッガ」を参照してください。 –