Przypisanie wskaznika do funkcji w klasie

0

Cześć,
Potrzebuje zamienić fragment kodu w "C" przypisujący wskaźnik do funkcji do tablicy funkcji i stworzyć w "C++" klasę w której będę miał tablicę funkcji.

typedef struct
{
	uint16_t    liczba;
	uint32_t(*fcRead)(uint16_t zmienna);
}Tmod;

volatile Tmod tbl[5];

uint32_t funkcja1(uint16_t zmienna)
{
	return (zmienna * 1);
}
uint32_t funkcja2(uint16_t zmienna)
{
	return (zmienna * 2);
}
uint32_t funkcja3(uint16_t zmienna)
{
	return (zmienna * 3);
}

volatile uint32_t test;

extern "C" void app_main(void)
{
	tbl[0].fcRead = &funkcja1;
	tbl[1].fcRead = &funkcja3;
	tbl[2].fcRead = &funkcja2;
	
	test = tbl[0].fcRead(2);	    
}

Niestety moja wiedzy jest zbyt mała w "C++" i wszelkie próby przypisania do tablicy zaznaczane są przez kompilator jako błąd (defTablicy).
Przykład klasy:

//Plik .hpp
class iofunc
{
public:
	uint32_t(*fcRead[5])(uint16_t); //5 elementowa tablica funkcji

	uint32_t mojaFunkcja1(uint16_t zmienna);
	uint32_t mojaFunkcja2(uint16_t zmienna);
	uint32_t mojaFunkcja3(uint16_t zmienna);

    void defTablicy(void);  // przypisanie funkcji do tablicy
    void wywFunkcji(uint16_t fc); // wywolanie funkcji    
	iofunc(void)
	{
		defTablicy();
	}
};

//Plik .cpp
uint32_t iofunc::mojaFunkcja1(uint16_t zmienna)
{
	return (zmienna * 1);
}

uint32_t iofunc::mojaFunkcja2(uint16_t zmienna)
{
	return (zmienna * 2);
}

uint32_t iofunc::mojaFunkcja3(uint16_t zmienna)
{
	return (zmienna * 3);
}

void iofunc::defTablicy(void)
{
	(*iofunc::fcRead[0]) = &iofunc::mojaFunkcja1;
	(*iofunc::fcRead[1]) = &iofunc::mojaFunkcja3;
	(*iofunc::fcRead[2]) = &iofunc::mojaFunkcja2;

}

void iofunc::wywFunkcji(uint16_t fc)
{
	return((*iofunc::fcRead[0])(2));
}

W jaki sposób przypisać do tablicy fcRead funkcje "mojaFunkcja1", "mojaFunkcja2" i "mojaFunkcja3" ?

3

Wow.

Deklarujesz wskaźnik na zwykłą funkcję, a nie metodę:

uint32_t(*fcRead[5])(uint16_t); //5 elementowa tablica funkcji

więc twoje deklaracje funkcji powinny mieć dodatkowo static.

static uint32_t mojaFunkcja1(uint16_t zmienna);

Do takiej zmiennej (tablicy) przypisujesz w ten sposób:

fcRead[0] = &iofunc::mojaFunkcja1;

a wywołujesz:

fcRead[0](2);

Dodatkowo funkcja wywFunkcji w implementacji zwraca coś, a masz ją zadeklarowaną jako void.
Więcej nie widzę.

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