gpt4 book ai didi

c++ - 使用模板时无效使用非静态数据成员

转载 作者:行者123 更新时间:2023-11-30 02:37:47 24 4
gpt4 key购买 nike

我截取了以下代码,它使用模板实现了二叉搜索树:

#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 的默认参数。

如果重要的话,我正在使用名为“Quincy 2005”的软件' 在 Windows 8.1 上进行编译(出于某些原因)。

最佳答案

默认值必须是文字,而不是变量名。

此外,具有默认值的参数必须在参数列表中排在最后。

而是使用:

void insert(Node<T> *p, T data) { ... }

// overload with only one argument
void insert(T data)
{
insert(root, data)
}

关于c++ - 使用模板时无效使用非静态数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com