Staram się zrealizować program, który jest tutaj:
https://www.youtube.com/watch?v=x0rQz_nQPjE&t=984s
ale dostaje informacje o błędzie. Tutaj jest kod:
#include <iostream>
using namespace std;
namespace p2D
{
class wektor;
class punkt;
class trojkat;
ostream& operator<<(ostream& cout, const punkt& p);
ostream& operator<<(ostream& cout, const trojkat& t);
}
namespace p3D
{
class wektor;
class punkt;
class trojkat;
ostream& operator<<(ostream& cout, const punkt& p);
ostream& operator<<(ostream& cout, const trojkat& t);
}
class p2D::punkt
{
friend class wektor;
friend ostream& operator << (ostream& cout, const punkt& p);
double x, y;
public:
punkt(double x0 = 0., double y0 = 0.): x(x0), y(y0) {}
};
ostream& p2D::operator<<(ostream& cout, const punkt& p)
{
cout << "(" << p.x << ", " << p.y << ")";
return cout;
}
class p2D::wektor
{
friend class trojkat;
double wx, wy;
public:
wektor(punkt p1 = punkt(), punkt p2 = punkt()): wx(p2.x - p1.x), wy(p2.y - p1.y){}
};
class p2D::trojkat
{
friend ostream& operator<<(ostream&, const trojkat&);
punkt p1, p2, p3;
public:
trojkat(punkt p01 = punkt(), punkt p02 = punkt(), punkt p03 = punkt()): p1(p01), p2(p02), p3(p03) {};
double pole();
};
double p2D::trojkat::pole(){
wektor w1(p1, p2);
wektor w2(p1, p3);
return 0.5 * abs(w1.wx * w2.wy - w2.wx * w1.wy);
}
ostream& p2D::operator << (ostream& cout, const trojkat& t){
cout << "(" << t.p1 << "-" << t.p2 << "-" << t.p3;
return cout;
}
class p3D::punkt
{
friend class wektor;
friend ostream& operator << (ostream& cout, const punkt& p);
double x, y, z;
public:
punkt(double x0 = 0., double y0 = 0., double z0 = 0.): x(x0), y(y0), z(z0) {}
};
ostream& p3D::operator<<(ostream& cout, const punkt& p)
{
cout << "(" << p.x << ", " << p.y << ", " << p.z << ")";
return cout;
}
class p3D::wektor
{
friend class trojkat;
double wx, wy, wz;
public:
wektor(double wx0 = 0., double wy0 = 0., double wz0 = 0.): wx(wx0), wy(wy0), wz(wz0){}
wektor(punkt p1 = punkt(), punkt p2 = punkt()): wx(p2.x - p1.x), wy(p2.y - p1.y), wz(p2.z - p1.z){}
};
class p3D::trojkat
{
friend ostream& operator<<(ostream&, const trojkat&);
punkt p1, p2, p3;
public:
trojkat(punkt p01 = punkt(), punkt p02 = punkt(), punkt p03 = punkt()): p1(p01), p2(p02), p3(p03) {};
double pole();
};
double p3D::trojkat::pole(){
wektor w1(p1, p2);
wektor w2(p1, p3);
wektor res((w1.wy * w2.wz - w2.wy * w1.wz),
(w1.wx * w2.wz - w2.wx * w1.wz),
(w1.wx * w2.wy - w2.wx * w1.wy));
return 0.5 * sqrt(res.wx * res.wx + res.wy * res.wy + res.wz * res.wz);
}
ostream& p3D::operator << (ostream& cout, const trojkat& t){
cout << "(" << t.p1 << "-" << t.p2 << "-" << t.p3;
return cout;
}
int main()
{
p2D::punkt p1, p2(1.), p3(1., 1.);
p2D::trojkat t2D(p1, p2, p3);
cout << "Trojkat: " << t2D << ", pole: "
<< t2D.pole() << endl;
return 0;
}
a tutaj informacja o błędzie
