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 #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; }
|
|
SeaMonster131 |
» 2011-07-16 16:27:47 << pomyłka, sorki ;)>> |
|
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ż void wczytajOsobe( string tab, string tab2, int lata, int i )
void wczytajOsobe( string tab, string tab2, int * lata, int i )
|
|
DejaVu |
» 2011-07-16 16:29:26 Zamień:
void wczytajOsobe( string tab, string tab2, int lata, int i )
na:
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. |
|
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 |
|
DejaVu |
» 2011-07-16 16:45:51 Użyj deklaracji funkcji, którą podałem - Twoje wnioski są błędne ;) |
|
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 :\ #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; }
|
|
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. |
|
« 1 » 2 |