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

Nie można przekonwertować std::string na std::string*

Ostatnio zmodyfikowano 2016-05-01 12:49
Autor Wiadomość
Szymo56
Temat założony przez niniejszego użytkownika
Nie można przekonwertować std::string na std::string*
» 2016-04-30 20:37:45
C/C++
#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?
P-147799
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:
» Kurs C++Wskaźniki lekcja
C++  Wskaźniki

( dodatkowo: )
» Kurs C++ » Poziom XWskaźnik na funkcję lekcja

P-147801
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.

C/C++
{
    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.
P-147805
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
C/C++
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?
» Kurs C++Wskaźniki lekcja
P-147821
« 1 »
  Strona 1 z 1