Bonjour à tous,

Alors voilà, je débute vraiment en C++, mais ayant touché un peu aux tableaux de pointeurs sur fonctions en C, je souhaiterais pouvoir faire de même en C++.

Pour illustrer la chose, un exemple de ce que je fais (j'ai mixé le hpp et cpp) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
 
class test
{
 
private:
 
	int m_var;
	float m_vfl;
	// etc... 
 
public:
 
	test();
	test(int a, float b);
	~test();
 
	int(test::*ftab[6])(const float v);
 
	void fonction_qqe(const int i, const float v);
 
	int fonction1(const float v);
	int fonction2(const float v);
	// etc...
	int fonction6(const float v);
 
};
 
// le constructeur : 
 
test::test(): m_var(0), m_vfl(0.0f) // etc...
{
	// initialisation du tableau de pointeur sur fonction
 
	int(test::*ftab[6])(const float v) = { &test::fonction1, &test::fonction2, /*etc...*/ &test::fonction6 };
 
}
 
// et maintenant l'utilisation dans un fonction membre : 
 
 
void test::fonction_qqe(const int i, const float v)
{
	float a(0.0)
 
	a = (this->*ftab[i])(v);
 
	// suite de la fonction
}

A la vue de ce code, on sais déjà qu'il est mauvais car je l'utilise exactement comme on le ferait en C (à l'exception des namepaces).
A la compilation, l'utilisation de -Wall me dit seulement que la variable "const float v" du pointeur de fonction n'est pas utilisé. Si j'enlève l'option -Wall, ça compile, mais me sort une belle erreur de segmentation...
Petit aparté, mes options de compilation sont -W -Wall -Wextra -Werror -O3

J'ai bien vérifié, il n'y a aucun cas pour lequel "i" (l'index du tableau de pointeur) serait supérieur à l'indice maxi (soit 5).

J'imagine donc que mon code est foireux dès son initialisation dans le constructeur, mais si je trouve des exemples de code sur le net, je remarque qu'à chaque fois, ces pointeurs sont initialisés en dehors des fonctions membres. Ors, j'en ai besoin au sein de ma classe uniquement.


Une âme charitable saurait mettre le doigt sur mon (mes) erreur(s) ?

Merci d'avance !


EDIT : bon.... Après avoir trituré mon code, finalement, sur un erreur, ça a marché. J'ai simplement supprimé la déclaration dans le *.hpp pour la déclarée et l'initialisée dans mon *.cpp (en dehors du constructeur), et ça marche impeccable. même le -Wall ne me sort aucune erreur.... Néanmoins je suis friand de savoir comment je pourrais mieux faire. car si je veux rajouter une fonction par la suite, cela m'oblige à en modifier une autre.... Aussi, je ne suis pas fan d'initialiser cette dernière en dehors de la classe... Une idée ? Merci d'avance !