J'hérite de cette classe :
class DukBinReader : public SDbFile<DukBinFormat_BigEndian>
{
...
bool read(DukBinFormat_BigEndian& dta)
{
// Quelques opérations
...
// J'appel la méthode de SDbFile, mais cette ligne
// génére une erreur de compilation :
SDbFile::read<DukBinFormat_BigEndian>( dukIn );
...
}
};
Voilà. Mon problème est dans le commantaire :
SDbFile::read<DukBinFormat_BigEndian>( dukIn );
me génére une erreur à la compilation avec MinGW :
error: `template<class T> class seqdb::SDbFile' used without template
parameters
>> J'ai même essayé : SDbFile<DukBinFormat_BigEndian>::read<DukBinFormat_BigEndian>( dukIn ) qui me retourne : error: invalid use of non-static member function `bool seqdb::SDbFile<T>::read(T&) [with T = DukBinFormat_BigEndian]'
Essayer d'une façon aléatoire, sans comprendre, n'apporte rien. Le mieux, c'est que tu postes un petit exemple complet (qu'on peut essayer nous même) qui montre le problème. Et que tu essaies de comprendre le message d'erreur, et te poses la question : pourquoi le compilateur l'a émis. S'il dit « cannot call member fonction without object », c'est qu'il ne trouve pas d'objet de type SDbFile< DukBinFormat_BigEndian > dans l'expression.
Oui, c'était exactement ça : une stupide erreur de ma part (cf mon post précédent)
>> J'ai même essayé :
SDbFile<DukBinFormat_BigEndian>::read<DukBinFormat_BigEndian>(
dukIn )
qui me retourne :
error: invalid use of non-static member function `bool
seqdb::SDbFile<T>::read(T&) [with T = DukBinFormat_BigEndian]'
Essayer d'une façon aléatoire, sans comprendre, n'apporte rien.
Le mieux, c'est que tu postes un petit exemple complet (qu'on
peut essayer nous même) qui montre le problème. Et que tu
essaies de comprendre le message d'erreur, et te poses la
question : pourquoi le compilateur l'a émis. S'il dit « cannot
call member fonction without object », c'est qu'il ne trouve pas
d'objet de type SDbFile< DukBinFormat_BigEndian > dans
l'expression.
Oui, c'était exactement ça : une stupide erreur de ma part (cf mon post
précédent)
>> J'ai même essayé : SDbFile<DukBinFormat_BigEndian>::read<DukBinFormat_BigEndian>( dukIn ) qui me retourne : error: invalid use of non-static member function `bool seqdb::SDbFile<T>::read(T&) [with T = DukBinFormat_BigEndian]'
Essayer d'une façon aléatoire, sans comprendre, n'apporte rien. Le mieux, c'est que tu postes un petit exemple complet (qu'on peut essayer nous même) qui montre le problème. Et que tu essaies de comprendre le message d'erreur, et te poses la question : pourquoi le compilateur l'a émis. S'il dit « cannot call member fonction without object », c'est qu'il ne trouve pas d'objet de type SDbFile< DukBinFormat_BigEndian > dans l'expression.
Oui, c'était exactement ça : une stupide erreur de ma part (cf mon post précédent)
TSalm
Merci pour cette clarification. Je ne savais justement pas trop, j'ai même failli mettre << classe templatée >>, mais ça sonnait vraiment franglais :-)
Donc, SDbFile est une classe template, et read est une fonction normale.
Juste un détail de vocabulaire (et je ne suis pas trop sûr comment faire la distinction en français) : SDbFile est un template (de classe), non une classe. Ce n'est que ses instantiations qui sont des classes : SDbFile< MaClasse >, etc.
(En anglais, où le modificateur précède toujours le modifié, on insiste que c'est un « class template », et non un « template class ». En français, où l'ordre est un peu plus souple, je ne sais pas exactement ce qu'il faudrait dire : « template de classe », peut-être. Mais j'ai toujours entendu dire « classe générique », quand on discutait le vocabulaire, et « classe template » ou « classe templatée » semblent courantes.)
Merci pour cette clarification.
Je ne savais justement pas trop, j'ai même failli mettre << classe
templatée >>, mais ça sonnait vraiment franglais :-)
Donc, SDbFile est une classe template, et read est une
fonction normale.
Juste un détail de vocabulaire (et je ne suis pas trop sûr
comment faire la distinction en français) : SDbFile est un
template (de classe), non une classe. Ce n'est que ses
instantiations qui sont des classes : SDbFile< MaClasse >, etc.
(En anglais, où le modificateur précède toujours le modifié, on
insiste que c'est un « class template », et non un « template
class ». En français, où l'ordre est un peu plus souple, je ne
sais pas exactement ce qu'il faudrait dire : « template de
classe », peut-être. Mais j'ai toujours entendu dire « classe
générique », quand on discutait le vocabulaire, et « classe
template » ou « classe templatée » semblent courantes.)
Merci pour cette clarification. Je ne savais justement pas trop, j'ai même failli mettre << classe templatée >>, mais ça sonnait vraiment franglais :-)
Donc, SDbFile est une classe template, et read est une fonction normale.
Juste un détail de vocabulaire (et je ne suis pas trop sûr comment faire la distinction en français) : SDbFile est un template (de classe), non une classe. Ce n'est que ses instantiations qui sont des classes : SDbFile< MaClasse >, etc.
(En anglais, où le modificateur précède toujours le modifié, on insiste que c'est un « class template », et non un « template class ». En français, où l'ordre est un peu plus souple, je ne sais pas exactement ce qu'il faudrait dire : « template de classe », peut-être. Mais j'ai toujours entendu dire « classe générique », quand on discutait le vocabulaire, et « classe template » ou « classe templatée » semblent courantes.)