error: expected primary-expression before ';' token
Ostatnio zmodyfikowano 2017-06-02 17:50
Sensej Temat założony przez niniejszego użytkownika |
error: expected primary-expression before ';' token » 2017-06-01 20:11:28 Witam. Dostaje problem widoczny w temacie w linii 111. W klasie Macierz przy tworzeniu macierzy NxM przy pomocy wektorów. Dzisiaj na zajęciach robiłem w podobny sposób i działało, nie wiem dlaczego teraz jest ten problem. #include <iostream> #include <math.h> #include <vector>
using namespace std;
class Dzielenie_Przez_Zero : exception { };
class Liczba_Zespolona { public: float re; float im; Liczba_Zespolona() { } Liczba_Zespolona( float re, float im ) { this->re = re; this->im = im; } friend ostream & operator <<( ostream & output, const Liczba_Zespolona & T ) { output << "Czesc rzeczywista: " << T.re << ", Czesc urojona: " << T.im; return output; } Liczba_Zespolona operator +( const Liczba_Zespolona & T ) { Liczba_Zespolona nt; nt.re = this->re + T.re; nt.im = this->im + T.im; return nt; } Liczba_Zespolona operator -( const Liczba_Zespolona & T ) { Liczba_Zespolona nt; nt.re = this->re - T.re; nt.im = this->im - T.im; return nt; } Liczba_Zespolona operator *( const Liczba_Zespolona & T ) { Liczba_Zespolona nt; nt.re = this->re * T.re - this->im * T.im; nt.im = this->re * T.im + this->im * T.re; return nt; } Liczba_Zespolona operator /( const Liczba_Zespolona & T ) { Liczba_Zespolona nt; if( T.re == 0 && T.im == 0 ) { throw Dzielenie_Przez_Zero(); } else { nt.re =( this->re * T.re + this->im * T.im ) /( pow( T.re, 2 ) + pow( T.im, 2 ) ); nt.im =( this->im * T.re - this->re * T.im ) /( pow( T.re, 2 ) + pow( T.im, 2 ) ); } return nt; } bool operator ==( const Liczba_Zespolona & T ) { if( re == T.re && im == T.im ) return true; else return false; } bool operator !=( const Liczba_Zespolona & T ) { if( re != T.re && im != T.im ) return true; else return false; } };
class Macierz { public: int kolumny; int wiersze; vector < vector < Liczba_Zespolona > > zespolona; Macierz( int kolumny, int wiersze, Liczba_Zespolona l_zespolona ) { this->kolumny = kolumny; this->wiersze = wiersze; zespolona.resize( kolumny ); for( int i = 0; i < kolumny; i++ ) { zespolona[ i ] = vector < Liczba_Zespolona >; } for( int i = 0; i < kolumny; i++ ) { for( int l = 0; l < wiersze; l++ ) { zespolona[ i ].push_back( l_zespolona ); } } } };
int main() { Liczba_Zespolona test1 = Liczba_Zespolona( 10, 20 ); Liczba_Zespolona test2 = Liczba_Zespolona( 20, 30 ); try { cout << test1 / test2 << endl; } catch( Dzielenie_Przez_Zero & e ) { cout << "Nie mozna dzielic przez zero!" << endl; } return 0; }
|
|
1aam2am1 |
» 2017-06-01 23:00:18 zespolona[ i ] = vector < Liczba_Zespolona >();
|
|
mateczek |
» 2017-06-02 11:15:30 ta cała pierwsza pętla for jest niepotrzebna. Oczywiście nikt nikomu nie zabrania robić macierz z odwrotnym indeksowaniem (wiersze traktować jak kolumny). Ale tak wydaje mi się czytelniej class Macierz { int kolumny; int wiersze; vector < vector < Liczba_Zespolona > > dataMatrix; public: Macierz( int kolumny, int wiersze, Liczba_Zespolona l_zespolona ) { this->kolumny = kolumny; this->wiersze = wiersze; dataMatrix.resize( wiersze ); for( int i = 0; i < wiersze; i++ ) { for( int l = 0; l < kolumny; l++ ) { dataMatrix[ i ].push_back( l_zespolona ); } } } }; lub z C++11 poprzez uzykanie referencji do wiersza class Macierz { int kolumny; int wiersze; vector < vector < Liczba_Zespolona > > dataMatrix; public: Macierz( int kolumny, int wiersze, Liczba_Zespolona l_zespolona ) { this->kolumny = kolumny; this->wiersze = wiersze; dataMatrix.resize( wiersze ); for( vector < Liczba_Zespolona > & wierszMacierzy: dataMatrix ) { for( int l = 0; l < kolumny; l++ ) { wierszMacierzy.push_back( l_zespolona ); } } } };
a jakbyś się uparł z pierwszą pętlą for to: class Macierz { int kolumny; int wiersze; vector < vector < Liczba_Zespolona > > dataMatrix; public: Macierz( int kolumny, int wiersze, Liczba_Zespolona l_zespolona ) { this->kolumny = kolumny; this->wiersze = wiersze; dataMatrix.resize( wiersze ); for( int i = 0; i < wiersze; i++ ) { dataMatrix[ i ].resize( kolumny ); } for( int i = 0; i < wiersze; i++ ) { for( int l = 0; l < kolumny; l++ ) { dataMatrix[ i ][ l ] = l_zespolona; } } } };
|
|
Sensej Temat założony przez niniejszego użytkownika |
» 2017-06-02 17:50:32 Dziękuje mateczek. Wszystko działa.
|
|
« 1 » |