【发布时间】:2015-07-16 13:22:57
【问题描述】:
我截取了以下代码,它使用模板实现了二叉搜索树:
#include<iostream>
using namespace std;
template<typename T>
class Node{
public:
T data;
Node<T> *left;
Node<T> *right;
Node<T> *parent;
Node(T input_data=NULL){
data=input_data;
left=NULL;
right=NULL;
parent =NULL;
}
};
template<typename T>
class BinarySearchTree{
private:
long n;
Node<T> *root;
public:
BinarySearchTree(Node<T> *input_root=NULL, long input_size=0){
n=input_size;
root=input_root;
}
void insert(Node<T> *p=root, T data){
Node<T> *par=NULL;
while(p!=NULL){
par=p;
if(data <= p->data)
p=p->left;
else
p=p->right;
}
Node<T> *z=new Node<T>(data);
if(root==NULL){
root=z;
n=1;
return;
}
z->parent=par;
if(data<=par->data)
par->left=z;
else
par->right=z;
n+=1;
}
void inorder(Node<T> *p=root){
if(p){
inorder(p->left);
cout<<p->data<<" ";
inorder(p->right);
}
}
int main(){
BinarySearchTree<int> *t=new BinarySearchTree<int>();
t->insert(5);
t->insert(15);
t->insert(3);
t->insert(14);
t->insert(25);
t->insert(10);
t->inorder();
}
第 27 行(即 Node *root;)出现编译错误,内容为:“非静态数据成员 'BinarySearchTree::root' 的使用无效”。我认为这与我在函数“insert”和“inorder”中包含的默认参数有关,因为当我删除默认参数“root”时我没有收到错误。
我的问题是,发生了什么,我该如何解决?如果可能的话,我想保留 root 的默认参数。
如果重要的话,我在 Windows 8.1 上使用名为“Quincy 2005”的软件进行编译(出于某些原因)。
【问题讨论】:
标签: c++ templates default-arguments