在编译该程序时出现此错误。这个问题是要找到最小窗口大小的最大值。这是我的代码:
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
int a[n];
for(int i=0; i<n; i++)
{
cin>>a[i];//to take input as array
}
for(int k=1; k<=n; k++)
{
int max=0;
for(int i=0; i<n-k; i++)
{
int min=a[i];
for(int j=0; j<k; j++)
{
if(a[i+j]<min)
{
min=a[i+j];
}
}
}
if(min > max)
{
max=min;
}
cout<<max<<" ";
}
return 0;
}
答案 0 :(得分:3)
您通过std::min
和std::max
的局部声明来隐藏(阴影)int max
和int min
函数。但是,这种阴影只发生在声明这些变量的局部范围内。
离开范围时,外部名称将再次可见:
int max=0; // <-- Here max hides std::max
for(int i=0; i<n-k; i++)
{
int min=a[i]; // <-- Here min hides std::min
for(int j=0; j<k; j++)
{
if(a[i+j]<min)
{
min=a[i+j];
}
}
} // <-- But here the local min goes away again
if(min > max) // <-- And here min is std::min, a function
因此,编译器认为min > max
是将int
与函数模板进行比较。而且它看不到该怎么做。
这是为什么认为使用using namespace std;
不好的原因之一。