błąd w kompilacji (tablice)

0

Witam.

Dlaczego jeżeli definicja funkcji wczytaj znajduje się na początku tzn. przed funckją main, to kompilacja kodu zachodzi bez problemu, natomiast jeżeli definicję tą podam na końcu to otrzymuje komunikat "invalid conversion from int to *int" ?

Poniżej
kod niedziałający

#include <iostream>
void wczytaj (int, int);
using namespace std;

main()
{

    int rozmiar;
    cout<<"podaj rozmiar tablicy :"<<endl;
    cin>>rozmiar;
    int A[rozmiar];
    wczytaj (A,rozmiar);
    
    return 0;

}

void wczytaj (int *poczatek, int ile)
{
    for(int i=0; i<ile; ++i)
    {
        cout<<i+1<<": ";
        cin>> poczatek[i];
    }
}
3

Bo int (int) i int* (wskaźnik na int) to różne typy. Doprowadź do tego, aby deklaracja była zgodna z definicją.

0
kq napisał(a):

Bo int (int) i int* (wskaźnik na int) to różne typy. Doprowadź do tego, aby deklaracja była zgodna z definicją.

Ok usunąłem int*poczatek. Zamieniłem ten parametr na int tablica[] i działa , tylko że pod warunkiem podania definicji przed funkcją main.
Proszę o bardziej szczegółową odpowiedź.

1

Bardziej szczegółowa odpowiedź odsyła do dowolnego kursu, rozdział o funkcjach, ewentualnie o typach. Deklaracja void wczytaj (int, int); mówi, że wczytaj przyjmuje dwie wartości liczbowe (int). Natomiast void wczytaj (int *poczatek, int ile) (albo void wczytaj (int tablica[], int ile) - to dokładnie to samo) mówi, ze wczytaj przyjmuje jeden wskaźnik na int i jeden int. Widzisz już różnicę?

0

pokaż aktualny kod

0

Aktualny kod

#include <iostream>
using namespace std;
void wczytaj (int, int);

main()
{
    int rozmiar;
    cout<<"podaj rozmiar tablicy :"<<endl;
    cin>>rozmiar;
    int tablica[rozmiar];
    wczytaj (tablica,rozmiar);
    return 0;
}

void wczytaj (int tablica[], int ile)
{
    for(int i=0; i<ile; ++i)
    {
        cout<<i+1<<": ";
        cin>> tablica[i];
    }
}

3

Tak jak napisał @kq deklaracja i definicja musi się zgadzać. Nie wiem czego w tym nie rozumiesz :p

#include <iostream>
using namespace std;
void wczytaj (int[], int);
 
int main()
{
    int rozmiar;
    cout<<"podaj rozmiar tablicy :"<<endl;
    cin>>rozmiar;
    int tablica[rozmiar];
    wczytaj (tablica,rozmiar);
    return 0;
}
 
void wczytaj (int tablica[], int ile)
{
    for(int i=0; i<ile; ++i)
    {
        cout<<i+1<<": ";
        cin>> tablica[i];
    }
}
  • int tablica[rozmiar];** nie rób tak w C++. Jeżeli nie znasz rozmiaru tablicy w czasie pisania kodu to użyj tablicy dynamicznej albo nawet lepiej std::vector

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