błąd [-fpermissive] podczas kompilacji programu

0

Witam, posiadam taki program, analizuję go, wszystko fajnie, kod coraz lepiej rozumiem, ale przy kompilacji wyskakuje mi: [Error] invalid conversion from 'void*' to 'int*' [-fpermissive]. Zadanie jest od wykładowcy i się normalni mi kompilowało na zajęciach, czy możliwe, że mam coś z kompilatorem? Wykluczam to, że przez przypadek coś zmieniłem w kodzie, bo mam kilka kopii tego pr i we wszystkich jest tak samo. Z góry dziękuję za pomoc

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ILE 5

void wczytaj(int, int *);
void wyswietl(int, int *);
int suma(int, int *);
int iloczyn(int, int *);
void losuj_tab(int, int *, int, int);
int losuj_element(int, int *);
void zamien(int *, int, int);
void mieszaj(int, int *);
int szukaj_min(int, int *);
int szukaj_max(int, int *);

int
main(void)
{
	/* int liczby[ILE]; */
	int *liczby;
	
	/* zamiast ILE mozemy podac wartosc wczytana z klawiatury i odwolywac
	 * sie do niej wszedzie tam gdzie odwolujemy sie do ILE 
	 */
	liczby = malloc(sizeof(int) * ILE);

	/* inicjalizacja generatora liczb losowych */
	srand(time(NULL));

	/* wczytaj(ILE, liczby); */
	losuj_tab(ILE, liczby, 1, 7);
	wyswietl(ILE, liczby);
	printf("Wylosowany element: %d\n", losuj_element(ILE, liczby));
	printf("suma = %d, iloczyn = %d\n", suma(ILE, liczby), iloczyn(ILE, liczby));
	printf("Indeks el. max = %d, el. min = %d\n", szukaj_max(ILE, liczby), szukaj_min(ILE, liczby));
	mieszaj(ILE, liczby);
	wyswietl(ILE, liczby);

	return 0;
}

void
wczytaj(int rozm, int tab[])
{
	int i;

	for (i = 0; i < rozm; i++) {
		printf("Podaj liczbe numer %d: ", i+1);
		scanf("%d", &tab[i]);
	}
}

void
wyswietl(int rozm, int tab[])
{
	int i;

	for (i = 0; i < rozm; i++)
		printf("tab[%d] = %d\n", i, tab[i]);

	return;
}

int
suma(int rozm, int tab[])
{
	int i, r = 0;

	for (i = 0; i < rozm; i++)
		r += tab[i];

	return r; 
}

int
iloczyn(int rozm, int tab[])
{
	int i, r = 1;

	for (i = 0; i < rozm; i++) {
		if (tab[i] == 0) return 0;
		else r *= tab[i];
	}

	return r;
}

void
losuj_tab(int rozm, int tab[], int min, int max)
{
	int i;
	
	for (i = 0; i < rozm; i++) {
		tab[i] = min + (rand() % (max+1));
	}
	
	return;
}

int losuj_element(int rozm, int tab[])
{
	return tab[rand() % rozm];
}

void zamien(int tab[], int i, int j)
{
	int t;

	printf("Zamiana %d z %d\n", i, j);
	if (i != j) {
		t = tab[i];
		tab[i] = tab[j];
		tab[j] = t;
	}
}

void mieszaj(int rozm, int tab[])
{
	int i;
	
	for (i = 0; i < rozm; i++) {
		zamien(tab, i, rand() % rozm);
	}
}

int szukaj_min(int rozm, int tab[])
{
	int i;
	int r = 0;
	
	for (i = 1; i < rozm; i++) {
		if (tab[i] < tab[r]) {
			r = i;
		}
	}
	
	return r;
}

int szukaj_max(int rozm, int tab[])
{
	int i;
	int r = 0;
	
	for (i = 1; i < rozm; i++) {
		if (tab[i] > tab[r]) {
			r = i;
		}
	}
	
	return r;
}
3
liczby = malloc(sizeof(int) * ILE);

To jest poprawny kod w C, ale w C++ nie. Zapewne kompilujesz za pomocą g++ lub jakiegoś IDE, gdzie zapisałeś go do pliku .cpp.

liczby = (int*)malloc(sizeof(int) * ILE);

Tak będzie poprawnie zarówno w C jak i w C++.

Przy okazji: szkoda, że nie podałeś linii, w której błąd występuje. Dlaczego?

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