开发者社区> 问答> 正文

Linux下pipe()未包含头文件却提示重名问题

(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;

展开
收起
云栖技术 2016-06-03 00:42:46 2387 0
1 条回答
写回答
取消 提交回答
  • 社区爱好者,专为云栖社区服务!

    pipe()是linux下面的一个函数,我猜是因为你用了pipe这个结构体导致名字重复了。

    建议将你的pipe结构体的名字改掉成其它的。

    2019-07-17 19:25:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载