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

Rozdział 26 Wczytywanie tekstu - wysypuje błąd przy kompilacji

Ostatnio zmodyfikowano 2018-02-03 19:14
Autor Wiadomość
empty2102
Temat założony przez niniejszego użytkownika
Rozdział 26 Wczytywanie tekstu - wysypuje błąd przy kompilacji
» 2018-02-03 17:47:16
Witam, problem dotyczy tego kodu:
C/C++
#include<iostream>
#include<string>

using namespace std;

void WczytajOsobe( string & imie, string & nazwisko, int & wiek )
{
    cout << "Podaj imie " << i + 1 << " osoby: " << endl;
    cin >> imie[ i ];
    cout << "Podaj nazwisko " << i + 1 << " osoby: " << endl;
    cin >> nazwisko[ i ];
    cout << "Podaj wiek " << i + 1 << " osoby: " << endl;
    cin >> wiek[ i ];
}
void WypiszOsobe( string & imie, string & nazwisko, int & wiek )
{
    cout << "Imie " << i + 1 << " osoby: " << endl;
    cout << imie[ i ] << endl;
    cout << "Nazwisko " << i + 1 << " osoby: " << endl;
    cout << nazwisko[ i ] << endl;
    cout << "Wiek " << i + 1 << " osoby: " << endl;
    cout << wiek[ i ] << endl;
}
int main()
{
    string imie[ 3 ];
    string nazwisko[ 3 ];
    int wiek[ 3 ];
    for( int i = 0; i < 3; i++ )
         WczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
    for( int i = 0; i < 3; i++ )
         WypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
    return 0;
   
}

log:

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Users\Intel-i5\Documents\C++ projects\wczytywanie tekstu.cpp||In function 'void WczytajOsobe(std::string&, std::string&, int&)':|
C:\Users\Intel-i5\Documents\C++ projects\wczytywanie tekstu.cpp|15|error: invalid types 'int[int]' for array subscript|
C:\Users\Intel-i5\Documents\C++ projects\wczytywanie tekstu.cpp||In function 'void WypiszOsobe(std::string, std::string, int)':|
C:\Users\Intel-i5\Documents\C++ projects\wczytywanie tekstu.cpp|25|error: invalid types 'int[int]' for array subscript|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Pierwsze pytanie - dlaczego wysypuje ten błąd? Referencja na tablice jest, gdy próbuje za pomocą argumentów przekazywać to zaczyna sypać mi jeszcze więcej błędów. Grzebałem w googlach na stronach angielskich, większość osób piszę coś o wskaźnikach których do tej pory nie znam i nie chce ich użyć bo zadanie ma zostać wykonane z aktualną wiedzą. :)
Drugie pytanie - Czy gdy wywołam funkcję, zmienna i zostanie przekazana? Jeśli tak, nie rozumiem w jaki sposób ona zostanie przekazana, przecież jej nie deklarowałem w funkcji a referencja z tego co rozumiem powinna odnosić się tylko do danych tablicy?
Chciałbym aby program informował o numerze wypisywanej osoby. Próbując za pomocą argumentów wysypywało iż zmienna i nie została zadeklarowana w funkcji.
P-169216
YooSy
» 2018-02-03 18:25:13
W funkcjach nie ma tablicy stringów, więc używasz imie i nazwisko jak zwykłych zmiennych.
Wywołując funkcje
WczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
 w ten sposób,
przekazujesz wyłuskaną wartość z tablicy.
P-169217
empty2102
Temat założony przez niniejszego użytkownika
» 2018-02-03 18:43:43
Próbuję zrozumieć to co napisałeś ale nic z tego. Chodzi Ci o deklaracje w funkcji? Musze to zrobić inaczej wysypuje ze zmienne są niezadeklarowane. Tablice stringów są bo jest referencja w funkcji do nich, gdybym dodał void WczytajOsobe(string &imie, string &nazwisko,int &wiek) klamry [] po zmiennych to funkcja odbiera to jako zwykły argument prawda? Może źle myślę, chce znaleźć rozwiązanie problemu.
Czy może chodziło Ci o to w jaki sposób funkcja widzi tablice stringów z main? Co wg Ciebie znaczy wyłuskana wartość?
P-169218
empty2102
Temat założony przez niniejszego użytkownika
» 2018-02-03 19:14:16
Ok rozwiązałem problem.
Nie wiem czy to wina kompilatora czy coś przegapiłem. Nie rozumiem sam do końca dlaczego wysypywało mi wcześniejszy błąd, po zresetowaniu komputera zaczął mi wyskakiwać kolejny. Otóż zmienna i nie była zadeklarowana w funkcji. Zmienna i jest przesyłana do funkcji ale z tego co widzę nie można z niej w żaden sposób korzystać. Jedynie jest wykorzystana przez funkcje do inkrementacji. Kod po wyeliminowaniu błędów :
C/C++
#include<iostream>
#include<string>
#include<cstdlib>
#include<cstdio>
using namespace std;

void WczytajOsobe( string & imie, string & nazwisko, int & wiek )
{
    cin >> imie;
    cin >> nazwisko;
    cin >> wiek;
}
void WypiszOsobe( string & imie, string & nazwisko, int & wiek )
{
   
    cout << imie << endl;
    cout << nazwisko << endl;
    cout << wiek << endl;
}
int main()
{
    string imie[ 3 ];
    string nazwisko[ 3 ];
    int wiek[ 3 ];
    for( int i = 0; i < 3; i++ )
         WczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
    for( int i = 0; i < 3; i++ )
         WypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] );
   
    return 0;
   
}

Może komuś się przyda :)
P-169219
« 1 »
  Strona 1 z 1