gpt4 book ai didi

c++ - 涉及模板的未知错误

转载 作者:行者123 更新时间:2023-11-28 07:16:22 24 4
gpt4 key购买 nike

这段代码在头文件中,头文件本身可以很好地编译。这个想法是这是一个 BST,我应该创建一个迭代器来按顺序迭代它。

我想我已经很好地解决了这个问题,但我的函数语法一定是错误的。它们在没有给定类型的情况下进行编译,但是当给定类型(例如 int)时,它说找不到带有 int 等的版本。

template <class TKey>
class bst {
private:
struct node {
node() { key=TKey(); link[0]=link[1]=NULL; parent=NULL; }
operator TKey () { return key; }
void print();

TKey key;
node *link[2];
node *parent;
};

public:
class iterator {
public:
private:
friend class bst<TKey>;
node *p;
};
iterator begin();
iterator end();

TKey operator*(iterator rhs){return rhs.p -> key;}
bool operator!=(iterator rhs) {return (!(this.p->key==rhs.p->key));}

void operator++();

bst() { Troot=NULL; }
~bst() { clear(Troot); }

bool test;

bool empty() { return Troot==NULL; }
void clear() { clear(Troot); Troot=NULL; }

node *prev_node;
void erase(TKey &key);
void insert(TKey &key);

void print_inorder() { print_inorder(Troot); }
void print_bylevel();
void print_iterator();

private:
void clear(node *);

node *minmax_key(node *, int);
node *erase(node *, TKey &);
node *insert(node *, TKey &);

void print_inorder(node *);

node *Troot;
};

那是类定义。

template <class  TKey>
class bst<TKey>::iterator bst<TKey>::begin(){
node *temp = Troot;
while(temp -> link[0])
temp = link[0];
cout << temp -> key << endl;

iterator it;
it.p = temp;
return it;
};

template <class TKey>
class bst<TKey>::iterator bst<TKey>::end(){
iterator it;
it.p = NULL;
return it;
};

这些是 Iterator 函数,似乎是导致问题的原因。

bst.h:266:2: error: no match for 'operator!=' in 'it != bst<TKey>::end [with TKey = int]()'

bst.h:266:2: note: candidates are:

并列出大量候选人

然后

bst.h:269:3: error: no match for 'operator++' in '++it'

bst.h: In member function 'bst<TKey>::iterator bst<TKey>::begin() [with TKey = int]':

bst.h:265:22: instantiated from 'void bst<TKey>::print_iterator() [with TKey = int]'

BST_usage1.cpp:33:19: instantiated from here

bst.h:70:3: warning: pointer to a function used in arithmetic [-Wpointer-arith]

bst.h:70:3: error: cannot convert 'int(const char*, const char*)throw ()' to 'bst<int>::node*' in assignment

最佳答案

您对 operator!= 的定义在上课bst<T> , 不在内部类中 bst<T>::iterator .因此,您正在定义一个接受 bst<T> 的运算符在左侧,还有一个 bst<T>::iterator在右边。

如果您将运算符定义移到内部 iterator 中类,您应该会发现它可以正常工作(或者至少提供更有用的错误消息)。

关于c++ - 涉及模板的未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184097/

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