Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

error: expected primary-expression before ';' token

Ostatnio zmodyfikowano 2017-06-02 17:50
Autor Wiadomość
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.

C/C++
#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;
    }
   
   
   
    /*
            if(test1==test2)
                cout<<"Rowny"<<endl;
        else
                cout<<"Nie jest rowny"<<endl;
   
            if(test1!=test2)
                cout<<"Rozny"<<endl;
        else
                cout<<"Nie jest rozny"<<endl;
        */
    return 0;
}
P-161948
1aam2am1
» 2017-06-01 23:00:18
C/C++
zespolona[ i ] = vector < Liczba_Zespolona >();
P-161958
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
C/C++
class Macierz {
    int kolumny;
    int wiersze;
    vector < vector < Liczba_Zespolona > > dataMatrix; //wektor wektorów
public:
    Macierz( int kolumny, int wiersze, Liczba_Zespolona l_zespolona )
    {
        this->kolumny = kolumny;
        this->wiersze = wiersze;
       
        dataMatrix.resize( wiersze ); // ilość wierszy w macierzy
       
        for( int i = 0; i < wiersze; i++ )
        {
            for( int l = 0; l < kolumny; l++ )
            {
                dataMatrix[ i ].push_back( l_zespolona ); // wypełnienie wiersza
            }
           
        }
       
    }
   
};

lub z C++11 poprzez uzykanie referencji do wiersza
C/C++
class Macierz {
    int kolumny;
    int wiersze;
    vector < vector < Liczba_Zespolona > > dataMatrix; //wektor wektorów
public:
    Macierz( int kolumny, int wiersze, Liczba_Zespolona l_zespolona )
    {
        this->kolumny = kolumny;
        this->wiersze = wiersze;
       
        dataMatrix.resize( wiersze ); // ilość wierszy w macierzy
       
        for( vector < Liczba_Zespolona > & wierszMacierzy: dataMatrix ) //pętla pobiera referencją do wiersza macierzy
        {
            for( int l = 0; l < kolumny; l++ )
            {
                wierszMacierzy.push_back( l_zespolona ); // wypełnienie wiersza poprzez wstawienie elementu
            }
           
        }
       
    }
   
};

a jakbyś się uparł z pierwszą pętlą for to:

C/C++
class Macierz {
    int kolumny;
    int wiersze;
    vector < vector < Liczba_Zespolona > > dataMatrix; //wektor wektorów
public:
    Macierz( int kolumny, int wiersze, Liczba_Zespolona l_zespolona )
    {
        this->kolumny = kolumny;
        this->wiersze = wiersze;
       
        dataMatrix.resize( wiersze ); // ilość wierszy w macierzy
        for( int i = 0; i < wiersze; i++ ) {
            dataMatrix[ i ].resize( kolumny ); //poszerzasz wiersze
        }
       
        for( int i = 0; i < wiersze; i++ ) {
            for( int l = 0; l < kolumny; l++ )
            {
                dataMatrix[ i ][ l ] = l_zespolona; // wypełnienie wiersza poprzez przypisanie
            }
           
        }
       
    }
   
};
P-161982
Sensej
Temat założony przez niniejszego użytkownika
» 2017-06-02 17:50:32
Dziękuje mateczek. Wszystko działa.


P-161991
« 1 »
  Strona 1 z 1