cristiano250 Temat założony przez niniejszego użytkownika |
» 2012-11-03 21:59:49 OK, tylko kiedy ostream i istream są na zewnątrz to kompilator z kolei wyrzuca mi to: |error: new declaration 'std::ostream& operator<<(std::ostream&, Wektor3&)'| |error: ambiguates old declaration 'std::ostream operator<<(std::ostream&, Wektor3&)'| |
|
DejaVu |
» 2012-11-03 22:07:35 ... dostałeś rozwiązanie, które kompiluje się pod GCC, a Ty dalej walczysz z wiatrakami? |
|
cristiano250 Temat założony przez niniejszego użytkownika |
» 2012-11-03 22:09:09 problem w tym, że nie kompiluje... może ja nie widze tego rozwiazania... |
|
cristiano250 Temat założony przez niniejszego użytkownika |
» 2012-11-03 22:22:42 TO JEST MÓJ PROGRAM NA CHWILĘ OBECNĄ: #include <cstdlib> #include <cmath> #include <iostream> #include <iomanip> #include <ostream>
using namespace std; using std::cout; using std::cin;
class Wektor3 { public: Wektor3( void ); Wektor3( double x, double y, double z ); Wektor3( const Wektor3 & w ); double X( void ) { return _x; } double Y( void ) { return _y; } double Z( void ) { return _z; } Wektor3 & Assign( double x, double y, double z ); Wektor3 & operator =( const Wektor3 & w ); double operator !( void ); double Azym( void ); double Elev( void ); Wektor3 & operator +=( const Wektor3 & w ); Wektor3 & operator *=( double k ); friend Wektor3 operator +( const Wektor3 & w1, const Wektor3 & w2 ); friend Wektor3 operator *( double k, const Wektor3 & w ); friend Wektor3 operator *( const Wektor3 & w, double k ); friend bool operator ==( const Wektor3 & w1, const Wektor3 & w2 ); friend bool operator !=( const Wektor3 & w1, const Wektor3 & w2 ); private: double _x, _y, _z; }; ostream operator <<( ostream & s, Wektor3 & w ); istream operator >>( istream & s, Wektor3 & w );
ostream & operator <<( ostream & s, Wektor3 & w ) { return s; }
istream & operator >>( istream & s, Wektor3 & w ) { return s; }
Wektor3::Wektor3( void ) { _x = _y = _z = 0.0; }
Wektor3::Wektor3( double x, double y, double z ) { _x = x; _y = y; _z = z; }
Wektor3::Wektor3( const Wektor3 & w )
{ _x = w._x; _y = w._y; _z = w._z; }
Wektor3 & Wektor3::Assign( double x, double y, double z ) { _x = x; _y = y; _z = z; return * this; }
Wektor3 & Wektor3::operator =( const Wektor3 & w )
{ _x = w._x; _y = w._y; _z = w._z; return * this; }
double Wektor3::operator !( void )
{ long double dlugosc; dlugosc = sqrt(( _x * _x ) +( _y * _y ) +( _z * _z ) ); return dlugosc; }
double Wektor3::Azym( void )
{ double azymut; azymut = acos( _x / sqrt(( _x * _x ) +( _y * _y ) ) ); if( - 180 < azymut && azymut <= 180 ) return azymut; }
double Wektor3::Elev( void )
{ double elewacja; elewacja = asin( _z /( sqrt(( _x * _x ) +( _y * _y ) +( _z * _z ) ) ) ); if( - 90 <= elewacja && elewacja <= 90 ) return elewacja; }
Wektor3 & Wektor3::operator +=( const Wektor3 & w )
{ _x += w._x; _y += w._y; _z += w._z; return * this; }
Wektor3 & Wektor3::operator *=( double k )
{ _x *= k; _y *= k; _z *= k; return * this; }
Wektor3 operator +( const Wektor3 & w1, const Wektor3 & w2 )
{ Wektor3 suma( w1._x + w2._x, w1._y + w2._y, w1._z + w2._z ); return suma; }
Wektor3 operator *( double k, const Wektor3 & w )
{ Wektor3 iloczynliczba(( w._x ) * k,( w._y ) * k,( w._z ) * k ); return iloczynliczba; }
Wektor3 operator *( const Wektor3 & w, double k )
{ Wektor3 iloczynliczba( k *( w._x ), k *( w._y ), k *( w._z ) ); return iloczynliczba; }
bool operator ==( const Wektor3 & w1, const Wektor3 & w2 )
{ bool wektory_sa_rowne = 0; if( w1._x == w2._x && w1._y == w2._y && w1._z == w2._z ) wektory_sa_rowne = 1; return wektory_sa_rowne; }
bool operator !=( const Wektor3 & w1, const Wektor3 & w2 )
{ bool wektory_nie_sa_rowne = 0; if( w1._x != w2._x || w1._y != w2._y || w1._z != w2._z ) wektory_nie_sa_rowne = 1; return wektory_nie_sa_rowne; }
int main( int argc, char * argv[] ) { Wektor3 w1( 1, 2, 3 ); Wektor3 w3, w4, w5; double ax, ay, az, k; cout << "Wektor w3 (x, y, z): "; cin >> w3; cout << "Wektor w4 (x, y, z): "; cin >> w4; cout << "Wspolczynnik k: "; cin >> k; Wektor3 w31( w3 ); cout << fixed << setprecision( 3 ) << endl; cout << "Wektor w1 = " << w1 << endl; cout << "Wektor w3 = " << w3 << endl; cout << "Kopia w3 = " << w31 << endl; cout << "Wektor w4 = " << w4 << endl << endl; w5 = w3; w5 += w4; cout << "Wektor w3+w4 = " << w5 << endl; w5 = w1 + w3; cout << "Wektor w1+w3 = " << w5 << endl << endl; w5 = w3; w5 *= k; cout << "Wektor k*w3 = " << w5 << endl; w5 = k * w4; cout << "Wektor k*w4 = " << w5 << endl; w5 = w3 * k; cout << "Wektor w3*k = " << w5 << endl << endl; cout << "Modul w3 = " << !w3 << endl; cout << "Azymut w3 = " << w3.Azym() << endl; cout << "Elewacja w3 = " << w3.Elev() << endl << endl; cout << "w3==w4 " <<(( w3 == w4 ) ? "tak" : "nie" ) << endl << endl; cout << "w3!=w4 " <<(( w3 != w4 ) ? "tak" : "nie" ) << endl << endl; return 0; }
|
|
cyklopek11 |
» 2012-11-03 22:24:14 |error: new declaration 'std::ostream& operator<<(std::ostream&, Wektor3&)'| |error: ambiguates old declaration 'std::ostream operator<<(std::ostream&, Wektor3&)'|
To znaczy że: nowa implementacja std::ostream & operator <<( std::ostream &, Wektor3 & );
występuje obok starej deklaracji: std::ostream operator <<( std::ostream &, Wektor3 & );
WIDZISZ TO ??? |
|
cristiano250 Temat założony przez niniejszego użytkownika |
» 2012-11-03 22:33:08 czyli tego ma nie byc ?
ostream operator <<( ostream & s, Wektor3 & w ); istream operator >>( istream & s, Wektor3 & w ); |
|
cristiano250 Temat założony przez niniejszego użytkownika |
» 2012-11-03 23:33:00 pozostałe operatory są dobrze zdefiniowane? bo program nie działa tak jak powinien... |
|
crash |
» 2012-11-04 00:04:54 ...
private: double _x, _y, _z; };
ostream & operator <<( ostream & s, Wektor3 & w ) { return s; }
istream & operator >>( istream & s, Wektor3 & w ) { return s; } ...
Czytaj co pisze kompilator: new declaration 'std::ostream& operator<<(std::ostream&, Wektor3&)' friend Wektor3 operator +( const Wektor3 & w1, const Wektor3 & w2 );
Po co 'zaprzyjaźniony' sam ze sobą? |
|
1 « 2 » 3 |