Jak podać dla funkcji w argumencie tablicę 2-wymiarową?

0

Witam, Jak podać dla funkcji tablicę dwuwymiarową jako parametr?
próbowałem coś takiego:

void dijkstra(int s,int n, int A[][5],int dist[])

i w mainie wywołałem:

dijkstra(1,il_wierzch,macierz_sasiedztwa,dist);

lecz pojawił się poniższy błąd:

error: cannot convert 'int (*)[il_wierzch]' to 'int (*)[5]' for argument '3' to 'void dijkstra(int, int, int (*)[5], int*)'|
2

Najłatwiej będzie jak zamiast tablic dwuwymiarowych będziesz używał jednowymiarowej + widoku - https://dsp.krzaq.cc/post/98/prosty-widok-na-macierz-2d-w-cpp/

Jak koniecznie chcesz tego nie robić, to wypadałoby podać więcej kodu, bo tak to mogę tylko zgadywać, że masz VLA, czyli nawet nie piszesz w poprawnym C++.

0

Nie wiem czy piszę w poprawnym c++, więc wkleję wam potrzebną część kodu:

w mainie :

ifstream wej;
    fstream wyj;
    wej.open("In0502.txt",ios::binary);
    wyj.open("Out0502.txt",ios::out);
    int il_wierzch;
    wej>>il_wierzch;
    int macierz_sasiedztwa[il_wierzch][il_wierzch];
   dijkstra(1,il_wierzch,macierz_sasiedztwa,dist);

reszta pewnie nie jest ważna.
funkcja która wykonuje algorytm dijkstry potrzebuje macierzy sąsiedztwa która jest w mainie tworzona.

2

Korzystasz z niestandardowego rozszerzenia kompilatora - VLA. W C++ wielkość tablic musi być znana w czasie kompilacji, a Twoja nie jest. Użyj zaproponowanego alternatywnego rozwiązania.

1

Jeśli rozmiar tablicy jest określony stałą, to tak:

void send2DimensionArray(int (*array)[5], int rows);

https://onlinegdb.com/r1XJQcoZV

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