在写splay,发现这样写会CE↓
感觉rt指针就是应该存在Splay这个类里,因为一颗splay有多个Node但只会有一个rt。
如果把rt放进Node里就按理应该使用static进行修饰,原因同上
想问问应该如何修改使之能通过编译?
编译命令c++ -Wall -std=c++14
代码片段如下:
template<class T>
class Splay{
private:
class Node{
public:
void splay(Node* to){
if(!to) Splay::rt=this;
}
};
Node* rt;
public:
Splay(){
insert(114514);//随便写的,只是为了调用一下insert函数
rt=nullptr;
}
void insert(T k){
rt->splay(nullptr);
}
};
Splay<int> tr;
报错信息如下
C:/Users/zhans/AppData/Local/Temp/CP Editor-ZodzhT/sol.cpp: In instantiation of 'void Splay<T>::Node::splay(Splay<T>::Node*) [with T = int]':
C:/Users/zhans/AppData/Local/Temp/CP Editor-ZodzhT/sol.cpp:43:4: required from 'void Splay<T>::insert(T) [with T = int]'
C:/Users/zhans/AppData/Local/Temp/CP Editor-ZodzhT/sol.cpp:39:4: required from 'Splay<T>::Splay() [with T = int]'
C:/Users/zhans/AppData/Local/Temp/CP Editor-ZodzhT/sol.cpp:46:12: required from here
C:/Users/zhans/AppData/Local/Temp/CP Editor-ZodzhT/sol.cpp:33:21: error: invalid use of non-static data member 'Splay<int>::rt'
33 | if(!to) Splay::rt=this;
| ~~~~~~~^~
C:/Users/zhans/AppData/Local/Temp/CP Editor-ZodzhT/sol.cpp:36:9: note: declared here
36 | Node* rt;
| ^~
]
Google无果,如能解决,感激不尽