(C++)在Windows下可以正常工作的程序,在Linux下无法编译,提示类型未声明。但在此之前我已经声明了名为“pipe”的类,并且添加了构造器。经过查询得知pipe重名,但并未包含有“pipe”的头文件。请问各位大神能否给我一个解释?我的教练拒绝回答我。理由是他不喜欢C++!
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream cin("bird.in");
ofstream cout("bird.out");
struct pipe
{
int P;
int L;
int H;
pipe(){P = L = H = -1;}
};
int up[10004] = {0},down[10004] = {0},n,m,k;
int nowx = 0,nowy = 0;
int point = 0;
int min_p = 50000;
int max_pipe = 0;
int cross = 0;
pipe Pi[10004];
int fly() //检查下一位置可否飞越
{
if(nowx==n&&nowy>0) //返回递归调用(到达终点)
{
if(min_p>point) min_p = point;
return 1;
}
int i;
bool out = false;
bool is_find = false;
int back = 0;
for(i = 1;!out;i++) //点击
{
nowy = nowy + up[nowx] * i;
nowx++;
point += i;
if(nowy>=m) back = nowy - m,nowy = m,out = true;
if(Pi[nowx].P != -1) //下一个位置上有管道
{
if(Pi[nowx].L>=nowy||Pi[nowx].H<=nowy) //当前点击次数无法飞越
{
if(max_pipe<cross) max_pipe = cross;
if(!out)
{
nowx--; //回溯
nowy -= up[nowx] * i; //回溯
}
else
{
nowx--;
nowy = nowy + back;
nowy = nowy - up[nowx] * i;
}
point -= i; //回溯
continue; //下一次循环
}
else
{
cross++;
int r = fly(); //检查下一位置
if(r==1) is_find = true;
cross--;
}
}
else //下一个位置上无管道
{
int r = fly(); //检查下一位置
if(r==1) is_find = true; //可以飞越
if(!out)
{
nowx--; //回溯
nowy -= up[nowx] * i; //回溯
}
else
{
nowx--;
nowy = nowy + back;
nowy = nowy - up[nowx] * i;
}
point -= i; //回溯
}
}
nowy = nowy - down[nowx]; //不点击
if(nowy<=0)
{
nowy += down[nowx];
if(is_find) return 1;
return 0;
}
nowx++;
if(Pi[nowx].P != -1) //下一个位置上有管道
{
if(Pi[nowx].L>=nowy||Pi[nowx].H<=nowy) //下落无法飞越
{
if(max_pipe<cross) max_pipe = cross;
}
else
{
cross++;
int r = fly(); //检查下一位置
if(r==1) is_find = true;
cross--;
}
}
else //下一个位置上无管道
{
int r = fly(); //检查下一位置
if(r==1) is_find = true; //可以飞越
}
nowx--;
nowy = nowy + down[nowx];
if(is_find) return 1;
return 0;
}
int main()
{
int i;
cin >> n >> m >> k;
for(i = 0;i < n;i++)
cin >> up[i] >> down[i];
for(i = 0;i < k;i++)
{
int temp;
cin >> temp;
cin >> Pi[temp].L >> Pi[temp].H;
Pi[temp].P = 1;
}
int ans = 0,temp = 0;
for(i = 1;i <= m;i++)
{
nowx = 0;
nowy = i;
point = 0;
temp = fly();
if(temp == 1) ans = 1;
}
if(ans==0) cout << 0 << endl << max_pipe;
else cout << 1 << endl << min_p;
cin.close();
cout.close();
return 0;
pipe()是linux下面的一个函数,我猜是因为你用了pipe这个结构体导致名字重复了。
建议将你的pipe结构体的名字改掉成其它的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。