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

[C++] error: invalid types 'double[int]' for array subscript

Ostatnio zmodyfikowano 2014-03-23 18:57
Autor Wiadomość
lost90
Temat założony przez niniejszego użytkownika
[C++] error: invalid types 'double[int]' for array subscript
» 2014-03-23 10:25:39
Witam!
Po pierwsze przyznam się i przeproszę: jestem kiepski w programowaniu! Ale co zrobić... muszę napisać program i napisałem na razie coś takiego (program nie jest skończony, ale chciałem sprawdzić czy to co napisałem robi to co chciałbym żeby robiło):
C/C++
#include <iostream>
using namespace std;

double z0[ 25 ] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
double z1[ 25 ] = { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };
double z2[ 25 ] = { 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 };
double z3[ 25 ] = { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 };
double macierzW[ 25 ][ 25 ], macierzSNG[ 25 ];
int i, j;


double wywolywaniemacierzy( double * macierz )
{
    for( i = 0; i < 25; i++ )
    {
        if( macierz[ i ] == 1 )
        {
            std::cout << "* ";
        }
        else
        {
            std::cout << "  ";
        }
        if( i == 4 )
        {
            std::cout << " " << endl;
        }
        if( i == 9 )
        {
            std::cout << " " << endl;
        }
        if( i == 14 )
        {
            std::cout << " " << endl;
        }
        if( i == 19 )
        {
            std::cout << " " << endl;
        }
        if( i == 24 )
        {
            std::cout << " " << endl;
        }
    }
}

double W( double * macierz, double * macierzT )
{
    double macierzW[ 25 ];
    for( j = 0; j < 25; j++ )
    {
        for( i = 0; i < 25; i++ )
        {
            macierzW[ i ][ j ] = 0.04 * macierz[ i ] * macierzT[ j ] + 0.04 * macierz[ i + 1 ] * macierzT[ j + 1 ];
        }
    }
}

double sgn( double * macierz )
{
    double macierzsgn[ 25 ];
    for( i = 0; i < 25; i++ )
    {
        if( macierz[ i ] < 0 )
        {
            macierzsgn[ i ] =- 1;
        }
        else
        {
            macierzsgn[ i ] = 1;
        }
    }
}

double SGN( double * macierz, double * macierz2 )
{
    double macierzSGN[ 25 ];
    for( j = 0; j < 25; j++ )
    {
        for( i = 0; i < 25; i++ )
        {
            macierzSGN[ j ] = macierzSGN[ j ] + macierz[ i ][ j ] * macierz2[ i ];
        }
    }
}

int main()
{
   
   
    wywolywaniemacierzy( z0 );
    W( z0, z0 );
    for( int j = 0; j < 25; j++ )
    {
        for( int i = 0; i < 25; i++ )
        {
            std::cout << macierzW[ i ][ j ];
        }
        std::cout << "  " << endl;
    }
   
    return 0;
}
Problem znajduje się w funkcji double W(double *macierz, double *macierzT) i double SGN(double *macierz, double *macierz2), w obu przypadkach chodzi o to samo.

53 17          [Error] invalid types 'double[int]' for array subscript
domyślam się, że coś spieprzyłem z tablicą dwuwymiarową, ale po kilku godzinach nie mam pojęcia co.
Mam nadzieję, że ktoś życzliwy mi pomoże. Z góry dziękuję za odpowiedź.


w czasie naprawiania błędów zadeklarowałem tablicę globalnie i zapomniałem usunąć lokalną deklaracje, a ta druga była deklarowana jako jednowymiarowa. Głupie niedopatrzenie!
Dzięki wielkie za odpowiedź.
P-107051
leon_w
» 2014-03-23 11:32:31
C/C++
double macierzW[ 25 ];
for( j = 0; j < 25; j++ )
{
    for( i = 0; i < 25; i++ )
    {
        macierzW[ i ][ j ]

Deklarujesz tablicę zwykłą (jednowymiarową) a chcesz z niej korzystać jako z dwuwumiarowej.

Wcześniej zadeklarowałeś globalnie dwuwymiarową, ale w danej funkcji ponownie deklarujesz jednowymiarową o tej samej nazwie.
To samo robisz z
double macierzsgn[ 25 ];

I używaj jakiś rozsądnych nazw, bo sam się pogubisz.
P-107057
lost90
Temat założony przez niniejszego użytkownika
» 2014-03-23 18:57:13
P-107096
« 1 »
  Strona 1 z 1