Rozdział 2.26.1 Niezadeklarowanie identyfikatora i brak odpowiedniej konwersji
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Rozdział 2.26.1 Niezadeklarowanie identyfikatora i brak odpowiedniej konwersji

AutorWiadomość
Temat założony przez niniejszego użytkownika
Rozdział 2.26.1 Niezadeklarowanie identyfikatora i brak odpowiedniej konwersji
» 2018-07-09 15:19:06
Błąd kompilatora: https://zapodaj.net​/f2f5d69bf261b.jpg.html

1. W zadaniu domowym jest wymagane, by main() wyglądało tak:
C/C++
int main()
{
    std::string imie[ 2 ];
    std::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 ] );
   
    return 0;
}
Lecz kompilator wyrzuca mi błąd o niezidentyfikowaniu identyfikatora "i". Jedyną możliwość znana dla mnie to dodanie samego argumentu "i", co narusza main(), więc nie mogę tak zrobić. Jaki jest haczyk tutaj?

2. Kompilator wyrzuca mi błędy o problemie z konwersją "string" do "string[]". Problem w tym, że tam jest i w 1, i w 2 miejscu tablica i nie rozumiem dlaczego kompilator widzi tam "string" zamiast "string[]"

Cały kod programu:
C/C++
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

bool czyWyraz( string wyraz, bool & wyraz1 )
{
    cin.clear();
    cin.ignore( 1000, '\n' );
    wyraz1 = cin.good();
    if( wyraz1 = false )
         return false;
   
}

bool czyLiczba( int liczba )
{
    cin.clear();
    cin.ignore( 1000, '\n' );
    liczba = cin.good();
    if( liczba = false )
         return false;
   
}

string podajWyraz()
{
    string wyraz;
    bool wyraz1;
    do
    {
        cin.clear();
        cin.ignore( 1000, '\n' );
        cin >> wyraz;
    } while( czyWyraz( wyraz, wyraz1 ) == false );
   
    return wyraz;
}

int podajLiczbe()
{
    int liczba;
    do
    {
        cin.clear();
        cin.ignore( 1000, '\n' );
        cin >> liczba;
    } while( czyLiczba( liczba ) == false );
   
    return liczba;
}

void wczytajOsobe( string iImie[], string iNazwisko[], int iWiek[] )
{
    cout << "Podaj imie: " << endl;
    iImie[ i ] = podajWyraz();
   
    cout << "Podaj nazwisko: " << endl;
    iNazwisko[ i ] = podajWyraz();
   
    cout << "Podaj wiek: " << endl;
    iWiek[ i ] = podajLiczbe();
}

void wypiszOsobe( string iImie[], string iNazwisko[], int iWiek[] )
{
    cout << iImie[ i ] << iNazwisko[ i ] << ", wiek: " << iWiek[ 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 ] );
   
    return 0;
}
P-171796
» 2018-07-09 15:23:55
P-171797
» 2018-07-09 15:31:36
... a funkcje czyLiczba, czyWyraz i podajWyraz są zbędne i napisane bez zastanowienia. Jaki sens jest sprawdzać czy napis wczytał się poprawnie skoro wszystkie znaki należą do łańcuchów znaków? Poza tym zapamiętanie stanu strumienia po jego "oczyszczeniu" nie ma żadnego sensu.
P-171798
Temat założony przez niniejszego użytkownika
» 2018-07-09 15:38:39
Zauważ tylko, że main() jest już narzucone z góry przez DejaVu. Więc albo coś jest źle wyżej, albo to main() jest z góry zrobione źle
P-171799
» 2018-07-09 16:05:36
Brakuje ci wyobraźni.. Poprzednio miałeś błędne wywołanie funkcji przy danej definicji funkcji i teraz jest dokładnie to samo - wywołanie nie pasuje do funkcji. Tylko teraz same wywołanie nie może być błędne, bo masz je narzucone.
P-171800
Temat założony przez niniejszego użytkownika
» 2018-07-09 16:14:46
Masz rację. Kompletnie nie myślę. Jak głupi dawałem całą tablice jako argument i teraz do mnie dotarło, że jako dane miałem wymuszony 1 indeks
P-171801
« 1 »
 Strona 1 z 1