Nie można przekonwertować std::string na std::string*
Ostatnio zmodyfikowano 2016-05-01 12:49
Szymo56 Temat założony przez niniejszego użytkownika |
Nie można przekonwertować std::string na std::string* » 2016-04-30 20:37:45 #include <iostream> #include <string>
void wczytaj( std::string imie[ 2 ], std::string nazwisko[ 2 ], int wiek[ 2 ] ) { for( int i = 0; i < 2; i++ ) std::cin >> imie[ i ]; for( int i = 0; i < 2; i++ ) std::cin >> nazwisko[ i ]; for( int i = 0; i < 2; i++ ) std::cin >> wiek[ 2 ]; } int main() { std::string imie[ 2 ]; std::string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytaj( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypisz( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
Kompilator wyświetla mi taki błąd w 4 linijce: cannot convert 'std::string' to 'std::string*' for argument 1 to 'void wczytaj' Domyślam się, że imie i imie[2] są różnymi typami danych, ale nie wiem jak zapisać argument 1 aby te typy się zgadzały. Mógłby mi też ktoś wytłumaczyć co znaczy '*' po nazwie typu? |
|
Rashmistrz |
» 2016-04-30 21:13:17 Mógłby mi też ktoś wytłumaczyć co znaczy '*' po nazwie typu? |
To oznacza zmienną wskaźnikową, czyli zawierającą informację o tym gdzie się w pamięci zawiera nasza prawdziwa zmienna... Nazwę tablicy można właściwie interpretować jako wskaźnik na pierwszy jej element, a liczba w kwadratowych nawiasach "oznacza" przesunięcie względem elementu przez wskaźnik. (tzw. offset) Materiały do nauki: WskaźnikiC++ Wskaźniki( dodatkowo: ) Wskaźnik na funkcję |
|
carlosmay |
» 2016-04-30 21:29:10 void wczytaj( std::string imie[ 2 ], std::string nazwisko[ 2 ], int wiek[ 2 ] ) |
- podawanie liczby elementów w pierwszym indeksie nie ma sensu (nie jest brany pod uwagę). std::string imie[] - tak wystarczy. wczytaj( imie[ i ], nazwisko[ i ], wiek[ i ] ); |
- użycie w wywołaniu funkcji imie[ i ] powoduje, że argumentem nie jest tablica tylko string z konkretnego elementu tablicy. wczytaj( imie, nazwisko, wiek ); - tak wystarczy. { for( int i = 0; i < 2; i++ ) std::cin >> imie[ i ]; for( int i = 0; i < 2; i++ ) std::cin >> nazwisko[ i ]; for( int i = 0; i < 2; i++ ) std::cin >> wiek[ 2 ]; }
|
Wczytywanie danych w takiej kolejności nie ma sensu. Gdyby tablica miała 500 elementów, w pierwszej kolejności trzeba by wpisać 500 imion, a później dopisać odpowiednio 500 nazwisk. |
|
pekfos |
» 2016-05-01 12:49:46 A gdzie rozumienie swojego kodu? Masz funkcję, która przyjmuje kilka tablic i je w całości wypełnia. Masz kilka tablic do wypełnienia, akurat takich, jakie ta funkcja przyjmuje. To, bez żadnych wątpliwości, brzmi jak wywołanie tej funkcji raz dla tych tablic i w efekcie wypełnienie ich. Zamiast tego, porzucasz logikę i sens i usiłujesz wywołać tę funkcję dla każdego elementu tablicy for( int i = 0; i < 2; i++ ) wczytaj( imie[ i ], nazwisko[ i ], wiek[ i ] ); |
Mógłby mi też ktoś wytłumaczyć co znaczy '*' po nazwie typu? | Wskaźniki |
|
« 1 » |