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

[Kurs C++, Lekcja 26] Błąd: "subscript requires array or pointer type"

Ostatnio zmodyfikowano 2011-07-16 18:01
Autor Wiadomość
Dark
Temat założony przez niniejszego użytkownika
[Kurs C++, Lekcja 26] Błąd: "subscript requires array or pointer type"
» 2011-07-16 16:20:22
Mam problem z problemem o następującej treści
(23): error C2109: subscript requires array or pointer type
(36): error C2109: subscript requires array or pointer type
a kod jest następujący
C/C++
#include <string>
#include <iostream>

using namespace std;

void wczytajOsobe( string tab, string tab2, int lata, int i )
{
    string imie;
    cout << "Wpisz imie " << i + 1 << " osoby: ";
    getline( cin, imie );
    imie = tab[ i ];
    cin.clear();
    cin.sync();
    string nazwisko;
    cout << "Wpisz nazwisko " << i + 1 << " osoby: ";
    getline( cin, nazwisko );
    nazwisko = tab[ i ];
    cin.clear();
    cin.sync();
    int wiek;
    cout << "Wpisz wiek " << i + 1 << " osoby: ";
    cin >> wiek;
    wiek = lata[ i ];
    cin.clear();
    cin.sync();
   
    return;
   
}

void wypiszOsobe( string tab, string tab2, int wiek, int i )
{
   
    cout << "Imie: " << tab[ i ] << endl;
    cout << "Nazwisko: " << tab2[ i ] << endl;
    cout << "Wiek: " << wiek[ i ] << endl;
   
    return;
   
}

int main()
{
    string imie[ 2 ];
    string nazwisko[ 2 ];
    int wiek[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i );
        j++;
    }
    for( int i = 0; i < 2; i++ )
    {
        wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i );
        j++;
    }
    return 0;
}
P-36093
SeaMonster131
» 2011-07-16 16:27:47
<< pomyłka, sorki ;)>>
P-36094
Dark
Temat założony przez niniejszego użytkownika
» 2011-07-16 16:28:12
Ok już znalazłem błąd, trzeba tylko było zrobić wskaźnik na tablice i w drugiej funkcji też
C/C++
void wczytajOsobe( string tab, string tab2, int lata, int i )
C/C++
void wczytajOsobe( string tab, string tab2, int * lata, int i )
P-36095
DejaVu
» 2011-07-16 16:29:26
Zamień:
C/C++
void wczytajOsobe( string tab, string tab2, int lata, int i )
na:
C/C++
void wczytajOsobe( string & imie, string & nazwisko, int lata, int i )

Symbol & (ampersand) to referencja. Nie została omówiona w kursie, a jest tu potrzebna (tylko przy wczytywaniu danych). Miałem to dopisać w rozdziale 24, który na chwilę obecną jest w budowie.

Druga sprawa to taka, że w funkcji pracujesz już na jednym elemencie, a nie na tablicy elementów, stąd dostajesz błąd w funkcjach.
P-36096
Dark
Temat założony przez niniejszego użytkownika
» 2011-07-16 16:36:57
Teraz jest problem wyświetlający errory po uprzednim dodaniu referencji i wskaźnika na tablice.
(48): error C2664: 'wczytajOsobe' : cannot convert parameter 3 from 'int' to 'int *'
1>          Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
(51): error C2664: 'wypiszOsobe' : cannot convert parameter 3 from 'int' to 'int *'
1>          Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
P-36099
DejaVu
» 2011-07-16 16:45:51
Użyj deklaracji funkcji, którą podałem - Twoje wnioski są błędne ;)
P-36101
Dark
Temat założony przez niniejszego użytkownika
» 2011-07-16 17:23:46
Poprawiłem kod tak coś nie wyświetla mi poprawnie wieku :\
C/C++
#include <string>
#include <iostream>

using namespace std;

void wczytajOsobe( string & tab, string & tab2, int lata, int i )
{
   
    bool wiek_stan;
    cout << "Wpisz imie " << i + 1 << " osoby: ";
    cin >> tab;
    cin.clear();
    cin.sync();
   
    cout << "Wpisz nazwisko " << i + 1 << " osoby: ";
    cin >> tab2;
    cin.clear();
    cin.sync();
   
    do
    {
        cout << "Wpisz wiek " << i + 1 << " osoby: ";
        cin >> lata;
        wiek_stan = cin.good();
        cin.clear();
        cin.sync();
    } while( !wiek_stan );
   
    return;
   
}

void wypiszOsobe( string tab, string tab2, int lata )
{
   
    cout << "Imie: " << tab << endl;
    cout << "Nazwisko: " << tab2 << endl;
    cout << "Wiek: " << lata << endl;
   
    return;
   
}

int main()
{
    string imie[ 2 ];
    string nazwisko[ 2 ];
    int wiek[ 2 ];
    for( int i = 0; i < 2; i++ )
         wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i );
   
    for( int i = 0; i < 2; i++ )
         wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
   
    return 0;
}
P-36103
DejaVu
» 2011-07-16 17:58:02
Dopisz symbol referencji koło argumentu lata we wczytywaniu (analogicznie do Twojego tab i tab2). Referencja pozwala zmienić wartość zmiennej, która jest poza funkcją. Jeżeli tego nie zrobisz to zmienna w funkcji jest tymczasowa, a wszelkie modyfikacje tej zmiennej nie wychodzą poza działanie tej funkcji.
P-36107
« 1 » 2
  Strona 1 z 2 Następna strona