C++ Dziwaczny błąd kompilacji

0

http://ideone.com/SJFtyR

Wywala przedziwny i dla mnie kompletnie niezrozumiały błąd kompilacji:

/home/bZ41OB/cc3yzrxE.o: In function `wkndms()':
prog.cpp:(.text._Z6wkndmsv[_Z6wkndmsv]+0x108): undefined reference to `opow(double, short, bool)'
collect2: error: ld returned 1 exit status

Mój kod:

#include <iostream>
#include <iomanip>
#include <vector>
#include <cfloat>
using namespace std;
 
struct odc {short xa, ya, xb, yb;};
struct prst {short A, B, C;};
struct pkt {odc o; bool uz;};
double powmaks=DBL_MAX;
vector<pkt> kd;
struct knd {double ppow; short x, y;};
vector<knd> kndms;
 
inline double scud(void);
inline void wkndms(void);
void opow (double, short, bool);
inline bool przec (odc, odc);
inline bool tprst (prst, prst);
inline bool sprst (odc, short, short);
inline int pdpr (prst, short, short);
inline bool znk (int, int);
 
int main()
{
    ios_base::sync_with_stdio(false);
    
    wkndms(); cout << fixed << setprecision(2) << scud() << '\n';
    
    return 0;
}
 
inline double scud(void)
{
    double tpow=0; short x, y; while(cin >> x >> y)
    {
        for(unsigned short i=0;i<kndms.size();++i)
            if(x==kndms[i].x&&y==kndms[i].y)
                {tpow+=kndms[i].ppow; break;}
    }
    return tpow;
}
 
inline void wkndms(void)
{
    int n; cin >> n;
    while(n!=-1)
    {
        cin >> n; kd.clear(); kd.reserve(n);
        for(;n>=0;--n)
        {pkt pom; cin >> pom.o.xb >> pom.o.yb; pom.uz=false; kd.push_back(pom);}
        
        knd ob; ob.x=kd[0].o.xb; ob.y=kd[0].o.yb;
        opow(0, 0, true); ob.ppow=powmaks;
        kndms.push_back(ob);
        
        cin >> n; 
    }
}
 
void opow(double obpow, int i, bool p)
{   
    if(p) for(unsigned short i=0;i<kd.size();++i)
    for(unsigned short j=0;j<kd.size();++j) if(j!=i)
        {kd[j].o.xa=kd[i].o.xb; kd[j].o.ya=kd[i].o.yb; opow(0, j, false);}
    
    for(unsigned short j=0;j<kd.size();++j)
        if(kd[j].uz&&przec(kd[i].o, kd[j].o)) return;
    obpow+=0.5*(kd[i].o.xa*kd[i].o.yb-kd[i].o.xb*kd[i].o.ya);
    if(obpow>=powmaks) return;
    kd[i].uz=true;
    
    bool ost=true;
    for(unsigned short j=0;j<kd.size();++j)
        if(!kd[j].uz) {opow(obpow, j, false); ost=false;}
    if(ost) powmaks=obpow; kd[i].uz=false; return;
}
 
inline bool przec (odc m, odc n)
{
    prst pm; pm.A=m.ya-m.yb; pm.B=m.xb-m.xa; pm.C=m.yb*m.xa-m.ya*m.xb;
    prst pn; pn.A=n.ya-n.yb; pn.B=n.xb-n.xa; pn.C=n.yb*n.xa-n.ya*n.xb;
    
    if(m.xb==n.xa&&m.yb==n.ya)
        {if(tprst(pm, pn)) return !sprst(m, n.xb, n.yb); else return false;}
    
    if(tprst(pm, pn))
    {
        odc pom; pom.xa=m.xb, pom.xb=m.xa, pom.ya=m.yb, pom.yb=m.ya;
        return !(sprst(pom, n.xa, n.ya)==sprst(pom, n.xb, n.yb)
            &&sprst(m, n.xa, n.ya)==sprst(m, n.xb, n.yb));
    }
    
    return (znk(pdpr(pm, n.xa, n.ya), pdpr(pm, n.xb, n.yb)) &&
        znk(pdpr(pn, m.xa, m.ya), pdpr(pn, m.xb, m.yb)));
}
 
inline bool tprst (prst m, prst n)
{
    if(m.B&&n.B)
    return (m.A/double(m.B)==n.A/double(n.B)&&m.C/double(m.B)==n.C/double(n.B));
    
    if(!m.B&&!n.B)
    return (m.C/double(m.A)==n.C/double(n.A));
    
    return false;
}
 
inline bool sprst (odc m, short x, short y)
{
    if(m.xa!=m.xb) return ((m.xb>m.xa&&x>m.xb)||(m.xb<m.xa&&x<m.xb));
    else return ((m.yb>m.ya&&y>m.yb)||(m.yb<m.ya&&y<m.yb));
}
 
inline int pdpr (prst k, short x, short y)
{
    return k.A*x+k.B*y+k.C;
}
 
inline bool znk (int a, int b)
{
    return ((a<0&&!(b<0))||(a>0&&!(b>0)));
}

Co jest kurka wodna i powietrzna tutaj źle? I o co chodzi w tym błędzie? Dzięki.

2
void opow (double, short, bool);
void opow(double obpow, int i, bool p)

Spójrz na typy, jak zgaduję.

1

A masz gdzieś w tym kodzie opow(double, short, bool) ?
Ja widzę tylko opow(double obpow, int i, bool p) a to nie jest to samo.

0

qrde... moje gapiostwo niesamowite...

Tak czy siak - dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1