Overloaded function - przesyłanie jako wskaźnik

0

Witam, chciałbym się dowiedzieć, dlaczego kompilator krzyczy:
more than one instance of overloaded function "ruch" matches the argument : function "ruch(int **, int, int, int, int)" function "ruch(int **szach, int ruch, int &i, int &j, int N)" argument types are: (int **, int, int, int, int)

Oto kod źródłowy:

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

bool skoczek(int, int, int, int);
bool ruch(int **, int, int, int, int);

int main()
{
	int n;
	cin >> n;
	if (skoczek(n, 1, 0, 0))
		cout << "possible" << endl;
	else cout << "impossible" << endl;

	system("pause");
	return 0;
}

bool skoczek(int N, int licz, int i, int j)
{
	static int **szach = new int *[N];
	for (int a = 0; a < N; a++)
		szach[a] = new int[N];
	for (int a = 0; a < N; a++)
		for (int b = 0; b < N; b++)
			szach[a][b] = 0;

	if (licz == N * N) return true;
	for (int k = 0; k < 8; k++)
	{
		szach[i][j] = licz;
		if (ruch(szach, k, i, j, N))
			return skoczek(N, licz + 1, i, j);
		szach[i][j] = 0;
	}
	return false;
}

bool ruch(int **szach, int ruch, int &i, int &j, int N)
{
	int tab_i[8] = { -2, -1, 1, 2, 2, 1, -1, -2 };
	int tab_j[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };

	i += tab_i[ruch]; j += tab_j[ruch];
	return (i < N && i >= 0 && j < N && j >= 0 && !szach[i][j]);
} 
1
bool ruch(int **, int, int, int, int);
bool ruch(int **szach, int ruch, int &i, int &j, int N)

To pierwsze NIE jest deklaracją tego drugiego. int& i int to nie są te same parametry.

Swoją drogą masz wycieki pamięci jak kranik, który hydraulik dał swojemu dziecku do naprawy.

I polecam dodać tę linijkę do kodu:

if (ruch(szach, k, i, j, N))
            return skoczek(N, licz + 1, i, j);
cout << "zaraz zrobie cos glupiego, bo i = " << i << " j = " << j << endl;     // dodaj te linijke
szach[i][j] = 0;

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