C++ 重载`operator[]`返回`node*`但它';而是返回'node'
我正在创建一个trie来保存小写字母的单词,我想重载[]操作符以返回指向包含下一个字符的节点的指针C++ 重载`operator[]`返回`node*`但它';而是返回'node',c++,C++,我正在创建一个trie来保存小写字母的单词,我想重载[]操作符以返回指向包含下一个字符的节点的指针 struct node{ node *next[27]; //26 pointers for each character from 'a'-'z' and 27th one for end of word. node *& operator[] (char c){ if(ch>='a' && ch<='z') retur
struct node{
node *next[27]; //26 pointers for each character from 'a'-'z' and 27th one for end of word.
node *& operator[] (char c){
if(ch>='a' && ch<='z') return *(next+(c-'a'));
return *(next+26); // *(next+26) equivalent to next[26] but since I'm overloading the operator []
}
};
实际输出:P4node 4node 4node
所需输出:
P4node P4node
请指出错误。是否应该是
(*trie)['''.]
?请记住变量trie
是一个指针。当您执行trie['''.]
时,它与*(trie+'''''.
一样,它将trie
视为一个node
元素数组,如果表达式在运行时使用,索引'.
将超出范围,从而导致未定义的行为(谢天谢地,您所展示的情况并非如此)@songyuanyao哇谢谢你,我犯了一个愚蠢的错误,既然我犯了错误,我现在怎么能结束这个问题呢?特别是既然没有答案,一个选择就是删除,但既然如此想要内容,这就不可取了,除非你认为你的问题对其他人来说完全没有用。另一个选择是@Someprogrammerdude写下该评论作为你接受的答案。第三种选择是,你回答自己的问题。
node *trie=new node;
cout<<typeid(trie).name()<<" "
<<typeid(trie['_']).name()<<" "
<<typeid(trie['d']).name();