Przekazywanie tablic jako argumentów funkcji

0

Witajcie, własciwie to rozpoczynam nauke cpp obiektowo i jestem załamany ze nie potraafie sobie poradzic z bledem

#include <iostream>
#include <Windows.h>
#include <string>


using namespace std;
/*Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób.W programie do wczytywania tekstu użyj std::cin.

Zadbaj o bezpieczeństwo wprowadzonych danych, tj. w przypadku błędnego wieku (np. wprowadzonego tekstu) program ma ponawiać żądanie aż do skutku.
Zmodyfikuj program z pierwszego zadania tak, aby używał do wczytywania tekstu funkcji std::getline.*/


void wczytajOsobe(string &TablicaImie[], string &TablicaNazwisko[], int &TablicaWiek[])
{
    TablicaImie[2];
    TablicaNazwisko[2];
    TablicaWiek[2];
    for(int i = 0; i < 2; i++){

        cout << "Podaj swoje imie, nazwisko, wiek" << endl;
        cin >> TablicaImie[i];cout << ", ";cin.sync();
        cin >> TablicaNazwisko[i];cout << ", ";cin.sync();
        cin >> TablicaWiek[i];

        while(cin.fail()){cin.clear();cin.sync();
            cout << "/nPonow swoj wiek: ";
            cin >> TablicaWiek[i];
            if(cin.good())break;}
    }
}

void wypiszOsobe(string TablicaImie[], string TablicaNazwisko[], int TablicaWiek[])
{
    int i = 0;
    TablicaImie[2];
    TablicaNazwisko[2];
    TablicaWiek[2];
    cout << "Twoje imie to: " << TablicaImie[i] << endl;
    cout << "Twoje nazwisko to: " << TablicaNazwisko[i] << endl;
    cout << "Twoje imie to: " << TablicaWiek[i] << endl;
}
    




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]);
   
    for(int i = 0; i < 2; i++)
         wypiszOsobe(imie[i], nazwisko[i], wiek[i]);
   
    cin.get();
    return 0;
}

przy kompilacji bład:

//while trying to match the argument list '(std::istream, int *)'

1>d:\documents and settings\ja\moje dokumenty\visual studio
2010\projects\remind\referencje\references.cpp(53): error C2664:
'wczytajOsobe' : cannot convert parameter 1 from 'std::string' to
'std::string *[]'

1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

1>d:\documents and settings\ja\moje dokumenty\visual studio
2010\projects\remind\referencje\references.cpp(56): error C2664:
'wypiszOsobe' : cannot convert parameter 1 from 'std::string' to
'std::string []'

1> No user-defined-conversion operator available that can
perform this conversion, or the operator cannot be called//

w czym rzecz?

dzieki za odp.

0

W metodach chcesz przyjmować jako argumenty referencje do TABLIC a przekazujesz tam pojedyncze ELEMENTY tablic. Jak chcesz przekazać całą tablicę to podajesz po prostu jej nazwę. tablica[x] to jest x-ty element tablicy.

0

void wczytajOsobe(string TablicaImie[], string TablicaNazwisko[], int TablicaWiek[])

tak tez nie dziala

3

Rzecz w nie przeczytaniu podstaw

#include <iostream>
#include <string>
using namespace std;

struct Osoba { string Imie,Nazwisko; unsigned Wiek; };

void wczytajOsobe(Osoba &os)
  {
   cout << "Podaj imie, nazwisko, wiek: ";
   cin >> os.Imie >> os.Nazwisko >> os.Wiek;
   while(!cin)
     {
      cin.clear();
      cin.sync();
      cout << endl << "Ponow swoj wiek: ";
      cin >> os.Wiek;
    }
}

void wypiszOsobe(const Osoba &os)
  {
    cout << "imie: " << os.Imie << endl;
    cout << "nazwisko: " << os.Nazwisko << endl;
    cout << "wiek: " << os.Wiek << endl;
  }
    
int main()
  {
   Osoba Tb[2];
   for(int i=0; i<2;++i) wczytajOsobe(Tb[i]);
   for(int i=0; i<2;++i)  wypiszOsobe(Tb[i]);
   return 0;
  }
1

A teraz zamiast programować metodą prób i błędów zastanów się 2 minuty nad tym co robisz. Bo póki co wygląda to tak:
http://i.imgur.com/IoWvl.jpg

void wczytajOsobe(string &imie, string &nazwisko, int &wiek)
//
void wypiszOsobe(string& imie, string& nazwisko, int& wiek)
0

Mam pytanie

wczytajOsobe(Tb[i]);

do czego dostęp ma ta tablica przekazana w argumencie funkcji?

0

Argumentem wywołania nie jest tablica tylko ELEMENT tablicy.

0

tzn ze ten element ma dostęp do 3 zmiennych strukturalnych? W zasadzie o to pytałem.

0

No jeśli elementami tablicy są struktury lub obiekty to tak.

0

rozumiem ze w tym przypadku jest to obiekt tak? Nie mozesz po prostu odpowiedziec? szybciej bym to zrozumiał

0
kial123 napisał(a):

rozumiem ze w tym przypadku jest to obiekt tak?
Jeżeli być dokładnym to nie jest to obiekt tylko struktura, ale w tym przypadku to akurat nie ma znaczenia.

kial123 napisał(a):

Nie mozesz po prostu odpowiedziec? szybciej bym to zrozumiał
Odpowiedzieć każdy może o ile zadane jakieś pytanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1