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.