monFichier.h : error C2244: 'maClass<T,ACS>::fwd' : impossible de
faire correspondre la définition de fonction avec une déclaration
existante.
monFichier.h : voir la déclaration de 'maClass<T,ACS>::fwd'
définition
'void maClass<T,ACS>::fwd(T::cum (*)[T::N_STATES],T::edge
(*)[T::N_SYMB_CODE],T::ext *)'
déclarations existantes
'void maClass<T,ACS>::fwd(T::cum (*)[T::N_STATES],T::edge
(*)[T::N_SYMB_CODE],T::ext *)'
(PS: ce n'est pas un copié collé mais j'ai vérifié 20 fois, c'est bien
la même signature qu'il m'affiche)
la class T est définie comme suit :
template<int N>
class mesTypes
{
public:
static const int N_STATES=8;
static const int N_SYMB_CODE=4;
typedef int ext;
typedef int cum;
....
static const int N_BITS=N+2;
....
};
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
AG
j'ai pas le droit de faire des tableaux de taille T::N_STATES ou T::N_SYMB_CODE dans ma fonction ? Ou j'ai la berlue ? Visiblement, lorsque j'enlève T::N_STATES ou T::N_SYMB_CODE, ça passe
à la compile. D'ou ma question : comment fonctionne le mécanisme de compilation des template ? A quelle moment le compilo connait la valeur de T::N_STATES ?
AG
j'ai pas le droit de faire des tableaux de taille T::N_STATES ou
T::N_SYMB_CODE dans ma fonction ? Ou j'ai la berlue ?
Visiblement, lorsque j'enlève T::N_STATES ou T::N_SYMB_CODE, ça passe
à la compile.
D'ou ma question : comment fonctionne le mécanisme de compilation des
template ? A quelle moment le compilo connait la valeur de T::N_STATES
?
j'ai pas le droit de faire des tableaux de taille T::N_STATES ou T::N_SYMB_CODE dans ma fonction ? Ou j'ai la berlue ? Visiblement, lorsque j'enlève T::N_STATES ou T::N_SYMB_CODE, ça passe
à la compile. D'ou ma question : comment fonctionne le mécanisme de compilation des template ? A quelle moment le compilo connait la valeur de T::N_STATES ?
Si tu as ça dans ton code, le code est erroné. En effet, ceci est une déclaration de fonction membre. Ce qui ne peut se faire qu'à l'intérieur de la définition de la classe.
Par ailleurs, tu essaies de passer un tableau de pointeurs de fonctions. L'écriture du type d'un pointeur de fonction est abominable. C'est pourquoi je conseille fortement d'utiliser un typedef :
typedef ... FonctionMachinTruc;
Enfin, un tableau "type C" n'étant guère plus qu'un pointeur, tu dois pouvoir remplacer le tableau (dans la liste de paramètres de la fonction fwd) par un pointeur. Un spécialiste du C peut confirmer ?
Mais puisque tu as un tableau, je me dois de poser la question que tu as déjà dû te poser : as-tu une raison pour ne pas utiliser std::vector<> ?
On Fri, 20 Jul 2007 16:48:20 +0200, "AG" <ag@tb.fr>:
Si tu as ça dans ton code, le code est erroné.
En effet, ceci est une déclaration de fonction membre. Ce qui ne peut
se faire qu'à l'intérieur de la définition de la classe.
Par ailleurs, tu essaies de passer un tableau de pointeurs de
fonctions.
L'écriture du type d'un pointeur de fonction est abominable. C'est
pourquoi je conseille fortement d'utiliser un typedef :
typedef ... FonctionMachinTruc;
Enfin, un tableau "type C" n'étant guère plus qu'un pointeur, tu dois
pouvoir remplacer le tableau (dans la liste de paramètres de la
fonction fwd) par un pointeur. Un spécialiste du C peut confirmer ?
Mais puisque tu as un tableau, je me dois de poser la question que tu
as déjà dû te poser : as-tu une raison pour ne pas utiliser
std::vector<> ?
Si tu as ça dans ton code, le code est erroné. En effet, ceci est une déclaration de fonction membre. Ce qui ne peut se faire qu'à l'intérieur de la définition de la classe.
Par ailleurs, tu essaies de passer un tableau de pointeurs de fonctions. L'écriture du type d'un pointeur de fonction est abominable. C'est pourquoi je conseille fortement d'utiliser un typedef :
typedef ... FonctionMachinTruc;
Enfin, un tableau "type C" n'étant guère plus qu'un pointeur, tu dois pouvoir remplacer le tableau (dans la liste de paramètres de la fonction fwd) par un pointeur. Un spécialiste du C peut confirmer ?
Mais puisque tu as un tableau, je me dois de poser la question que tu as déjà dû te poser : as-tu une raison pour ne pas utiliser std::vector<> ?
Fabien LE LEZ
Par ailleurs, tu essaies de passer un tableau de pointeurs de fonctions.
Euh... Finalement, non. Enfin, je ne crois pas. C'est quoi le type "T::cum (*)[T::N_STATES]" exactement ?
Par ailleurs, tu essaies de passer un tableau de pointeurs de
fonctions.
Euh... Finalement, non. Enfin, je ne crois pas.
C'est quoi le type "T::cum (*)[T::N_STATES]" exactement ?
Si tu as ça dans ton code, le code est erroné. En effet, ceci est une déclaration de fonction membre. Ce qui ne peut se faire qu'à l'intérieur de la définition de la classe. oui, j'ai un peu modifier le message exact. Merci de préciser. En
l'occurence, j'ai bien mis la définition et la déclaration comme il faut.
Par ailleurs, tu essaies de passer un tableau de pointeurs de fonctions. L'écriture du type d'un pointeur de fonction est abominable. C'est pourquoi je conseille fortement d'utiliser un typedef :
typedef ... FonctionMachinTruc;
int (*)[] est le type d'un pointeur sur un tableau int (*)[12] est le type d'un pointeur sur un tableau de 12 éléments.
si j'ai int tab[1230][12];
et que je veux passer ce tableau à une fonction, je passe un pointeur sur le premier élément. En l'occurence, le premier élément de ce talbeau est du type "tableau de 12 éléments"
d'ou : int (*)[12]
ou si je veux lui donner un nom :
int (*ptr)[12]
Enfin, un tableau "type C" n'étant guère plus qu'un pointeur, tu dois pouvoir remplacer le tableau (dans la liste de paramètres de la fonction fwd) par un pointeur. Un spécialiste du C peut confirmer ? C'est ce que j'ai fait. Pour un tableau à deux dimension, tu dois
préciser la longueur de la deuxième dimension. (pour que lorsqu'on fait ptr++, l'incrément se fasse bien de 12 int, j'imagine).
Mais puisque tu as un tableau, je me dois de poser la question que tu as déjà dû te poser : as-tu une raison pour ne pas utiliser std::vector<> ? Effectivement. En l'occurence, mon code est réinterprété par la suite,
et ce deuxième compilo ne parle pas encore la STL. (mais j'ai une version du même code avec des vecteur, et c'est bô!)
Si tu as ça dans ton code, le code est erroné.
En effet, ceci est une déclaration de fonction membre. Ce qui ne
peut
se faire qu'à l'intérieur de la définition de la classe.
oui, j'ai un peu modifier le message exact. Merci de préciser. En
l'occurence, j'ai bien mis la définition et la déclaration comme il
faut.
Par ailleurs, tu essaies de passer un tableau de pointeurs de
fonctions.
L'écriture du type d'un pointeur de fonction est abominable. C'est
pourquoi je conseille fortement d'utiliser un typedef :
typedef ... FonctionMachinTruc;
int (*)[] est le type d'un pointeur sur un tableau
int (*)[12] est le type d'un pointeur sur un tableau de 12 éléments.
si j'ai int tab[1230][12];
et que je veux passer ce tableau à une fonction, je passe un pointeur
sur le premier élément.
En l'occurence, le premier élément de ce talbeau est du type "tableau
de 12 éléments"
d'ou : int (*)[12]
ou si je veux lui donner un nom :
int (*ptr)[12]
Enfin, un tableau "type C" n'étant guère plus qu'un pointeur, tu
dois
pouvoir remplacer le tableau (dans la liste de paramètres de la
fonction fwd) par un pointeur. Un spécialiste du C peut confirmer ?
C'est ce que j'ai fait. Pour un tableau à deux dimension, tu dois
préciser la longueur de la deuxième dimension. (pour que lorsqu'on
fait ptr++, l'incrément se fasse bien de 12 int, j'imagine).
Mais puisque tu as un tableau, je me dois de poser la question que
tu
as déjà dû te poser : as-tu une raison pour ne pas utiliser
std::vector<> ?
Effectivement. En l'occurence, mon code est réinterprété par la suite,
et ce deuxième compilo ne parle pas encore la STL. (mais j'ai une
version du même code avec des vecteur, et c'est bô!)
Si tu as ça dans ton code, le code est erroné. En effet, ceci est une déclaration de fonction membre. Ce qui ne peut se faire qu'à l'intérieur de la définition de la classe. oui, j'ai un peu modifier le message exact. Merci de préciser. En
l'occurence, j'ai bien mis la définition et la déclaration comme il faut.
Par ailleurs, tu essaies de passer un tableau de pointeurs de fonctions. L'écriture du type d'un pointeur de fonction est abominable. C'est pourquoi je conseille fortement d'utiliser un typedef :
typedef ... FonctionMachinTruc;
int (*)[] est le type d'un pointeur sur un tableau int (*)[12] est le type d'un pointeur sur un tableau de 12 éléments.
si j'ai int tab[1230][12];
et que je veux passer ce tableau à une fonction, je passe un pointeur sur le premier élément. En l'occurence, le premier élément de ce talbeau est du type "tableau de 12 éléments"
d'ou : int (*)[12]
ou si je veux lui donner un nom :
int (*ptr)[12]
Enfin, un tableau "type C" n'étant guère plus qu'un pointeur, tu dois pouvoir remplacer le tableau (dans la liste de paramètres de la fonction fwd) par un pointeur. Un spécialiste du C peut confirmer ? C'est ce que j'ai fait. Pour un tableau à deux dimension, tu dois
préciser la longueur de la deuxième dimension. (pour que lorsqu'on fait ptr++, l'incrément se fasse bien de 12 int, j'imagine).
Mais puisque tu as un tableau, je me dois de poser la question que tu as déjà dû te poser : as-tu une raison pour ne pas utiliser std::vector<> ? Effectivement. En l'occurence, mon code est réinterprété par la suite,
et ce deuxième compilo ne parle pas encore la STL. (mais j'ai une version du même code avec des vecteur, et c'est bô!)
AG.
Fabien LE LEZ
On Fri, 20 Jul 2007 18:09:40 +0200, "AG" :
int (*)[] est le type d'un pointeur sur un tableau int (*)[12] est le type d'un pointeur sur un tableau de 12 éléments.
Ah, oui, effectivement. Ça rappelle de vieux souvenirs...
Effectivement. En l'occurence, mon code est réinterprété par la suite, et ce deuxième compilo ne parle pas encore la STL.
Au pire, n'as-tu pas moyen de faire ta propre classe "tableau à deux dimensions" ?
On Fri, 20 Jul 2007 18:09:40 +0200, "AG" <ag@tb.fr>:
int (*)[] est le type d'un pointeur sur un tableau
int (*)[12] est le type d'un pointeur sur un tableau de 12 éléments.
Ah, oui, effectivement. Ça rappelle de vieux souvenirs...
Effectivement. En l'occurence, mon code est réinterprété par la suite,
et ce deuxième compilo ne parle pas encore la STL.
Au pire, n'as-tu pas moyen de faire ta propre classe "tableau à deux
dimensions" ?
int (*)[] est le type d'un pointeur sur un tableau int (*)[12] est le type d'un pointeur sur un tableau de 12 éléments.
Ah, oui, effectivement. Ça rappelle de vieux souvenirs...
Effectivement. En l'occurence, mon code est réinterprété par la suite, et ce deuxième compilo ne parle pas encore la STL.
Au pire, n'as-tu pas moyen de faire ta propre classe "tableau à deux dimensions" ?
Fabien LE LEZ
On Fri, 20 Jul 2007 16:48:20 +0200, "AG" :
Mon compilo me renvoie l'erreur suivante :
Je t'invite à créer un bout de code, le plus court possible, qui devrait compiler d'après toi, mais que le compilateur rejette.
Une fois que tu auras fait ça, il y a de bonnes chances pour que tu aies compris toi-même d'où le problème vient. Si ce n'est pas le cas, poste ce petit bout de code ici.
On Fri, 20 Jul 2007 16:48:20 +0200, "AG" <ag@tb.fr>:
Mon compilo me renvoie l'erreur suivante :
Je t'invite à créer un bout de code, le plus court possible, qui
devrait compiler d'après toi, mais que le compilateur rejette.
Une fois que tu auras fait ça, il y a de bonnes chances pour que tu
aies compris toi-même d'où le problème vient.
Si ce n'est pas le cas, poste ce petit bout de code ici.
Je t'invite à créer un bout de code, le plus court possible, qui devrait compiler d'après toi, mais que le compilateur rejette.
Une fois que tu auras fait ça, il y a de bonnes chances pour que tu aies compris toi-même d'où le problème vient. Si ce n'est pas le cas, poste ce petit bout de code ici.
James Kanze
On Jul 20, 5:49 pm, Fabien LE LEZ wrote:
Par ailleurs, tu essaies de passer un tableau de pointeurs de fonctions.
Euh... Finalement, non. Enfin, je ne crois pas. C'est quoi le type "T::cum (*)[T::N_STATES]" exactement ?
C'est un pointeur à un tableau de T::cum. C'est ce que tu as, par exemple, quand un tableau à deux dimensions se transforme en pointeur.
-- James Kanze (Gabi Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Jul 20, 5:49 pm, Fabien LE LEZ <grams...@gramster.com> wrote:
Par ailleurs, tu essaies de passer un tableau de pointeurs de
fonctions.
Euh... Finalement, non. Enfin, je ne crois pas.
C'est quoi le type "T::cum (*)[T::N_STATES]" exactement ?
C'est un pointeur à un tableau de T::cum. C'est ce que tu as,
par exemple, quand un tableau à deux dimensions se transforme en
pointeur.
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34