這是我第一次進入C++模板,我試圖構建一個BinaryTree
模板來幫助我處理Project Euler問題;但是,我似乎得到一個錯誤,其中BinaryTree
類不承認BinaryTreeNode
的所有構造函數!這是代碼的一小部分。C++模板限制成員構造函數
template <class T>
class BinaryTreeNode
{
private:
BinaryTreeNode<T>* _left;
BinaryTreeNode<T>* _right;
T* _value;
public:
BinaryTreeNode();
explicit BinaryTreeNode(const T& value) : _value(&(T(value))) {}
BinaryTreeNode(BinaryTreeNode<T>& left, BinaryTreeNode<T>& right, const T& value) :
_left(&left), _right(&right), _value(&(T(value))){}
};
的二叉樹類
#include "BinaryTreeNode.h"
template <class T>
class BinaryTree
{
private:
BinaryTreeNode<T>* _root;
BinaryTreeNode<T>* _current;
unsigned int size;
public:
BinaryTree() : size(0), _root(0), _current(0) { }
explicit BinaryTree(BinaryTree<T>& leftTree, BinaryTree<T>& rightTree, const T& value) :
size(leftTree.Size() + rightTree.Size() + 1), _root(leftTree.Root(), rightTree.Root(), value), _current(_root) {}
explicit BinaryTree(const T& value) : size(1), _root(value) {}
const BinaryTreeNode<T>& Root() const { return *_root;}
};
我得到這些錯誤。
error C2359: 'BinaryTree<T>::_root' : member of non-class type requires single initializer expression
error C2440: 'initializing' : cannot convert from 'const int' to 'BinaryTreeNode<T> *'
error C2439: 'BinaryTree<T>::_root' : member could not be initialized
的BinaryTreeNode
構造(BinaryTreeNode<T>&, BinaryTreeNode<T>&, const T& value)
作品,當我有它在我的主代碼,但它似乎並沒有在我的BinaryTree
模板的工作。有人知道爲什麼
您在課程結束時缺少';'。 'explicit'關鍵字只對具有單個參數的構造函數有用。 '_value(&(T(value)))'用一個臨時指針初始化_value,該指針將在語句後立即被銷燬,導致一個懸掛指針。 'BinaryTreeNode :: BinaryTreeNode()'被聲明但沒有定義,這是故意的嗎?如果是這樣,你應該保密。 –
@Luc Touraille真的是一個很好的答案,而不是評論。 – neuront
@neuront不是真的,因爲我沒有花時間去發現真正的問題,這只是我發現的一些問題。 –