2 yloihyl YLOIHyl 于 2014.11.18 19:50 提问

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

2个回答

a624731186
a624731186   2014.11.19 08:17

不贴代码,没法分析啊
写代码的错误到最发现都是小错误

你的教练不会,所以。。。。嘿嘿

YLOIHyl
YLOIHyl 贴了代码
接近 3 年之前 回复
lovesmiles
lovesmiles   Rxr 2014.11.26 10:29

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

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

Csdn user default icon
上传中...
上传图片
插入图片