C++ 重载`operator[]`返回`node*`但它';而是返回'node'

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

我正在创建一个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') 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();