为什么会CE
  • 板块学术版
  • 楼主dream_on_screen
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/8/1 13:53
  • 上次更新2025/8/1 19:20:52
查看原帖
为什么会CE
912241
dream_on_screen楼主2025/8/1 13:53
#include <iostream>
#include <algorithm>
using namespace std;
class segment_tree
{
	private:
		struct node
		{
			int l,r,maxium,minium;
		};
		node t[800005];
	public:
		void build(int id,int l,int r)
		{
			...(略)
		}
		int min(int id,int l,int r)
		{
			if(t[id].l==l&&t[id].r==r)
				return t[id].minium;
			int mid=t[id].l+t[id].r>>1;
			bool f1=l<=mid,f2=mid<r;
			if(f1&&!f2)
				return min(id*2,l,r);
			else if(!f1&&f2)
				return min(id*2+1,l,r);
			else
				return min(min(id*2,l,mid),min(id*2+1,mid+1,r)); //注意看这一行
		}
		...
};
...
error: no matching function for call to 'segment_tree::min(int, int)'
     return min(min(id*2,l,mid),min(id*2+1,mid+1,r)); 

在这行语句中,外层的min试图调用STL函数,内层的min试图递归调用segment_tree::min

所以这说明编译器认为在同一个语句里同一个标识符只能代表同一个函数,还是不同作用域的函数不能构成重载?

2025/8/1 13:53
加载中...