Class嵌套CE求助
  • 板块学术版
  • 楼主Cap1taL
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/2/6 17:35
  • 上次更新2023/10/24 01:32:37
查看原帖
Class嵌套CE求助
467107
Cap1taL楼主2023/2/6 17:35

在写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无果,如能解决,感激不尽

2023/2/6 17:35
加载中...