Si la classe a été déclarée avant, vous n'aurez pas besoin de redéfinir les paramètres par défaut. Par exemple:
// forward declare only
template <typename T = int, size_t N = 10>
struct array;
// actual definition
template <typename T , size_t N>
struct array
{};
int main(void)
{
array<> a; // uses the defaults it saw in the forward-declaration
}
Regardez au-dessus de votre définition pour voir si vous l'avez déclaré.
Par ailleurs, si vous donnez les valeurs par défaut à un endroit, et les défauts différents à un autre, vous obtiendrez une erreur de compilation:
template <typename T = int, size_t N = 10>
struct array;
// error: redefinition of default parameter
template <typename T = double , size_t N = 2>
struct array
{};
Essayez de donner le code que vous nous avez montré par défaut qui ne peuvent peut-être correspondre accidentellement, comme:
struct stupid_special_tag_type_lolroflwat {};
template <
typename IteratorT = stupid_special_tag_type_lolroflwat,
typename NodeFactoryT = stupid_special_tag_type_lolroflwat,
typename T = stupid_special_tag_type_lolroflwat
>
struct tree_parse_info
{
// ...
};
Si vous obtenez des erreurs de redéfinition, vous savez que vous l'avez donné par défaut dans un autre emplacement.
Il ne compile pas. Postez le code réel. –
Si vous avez trouvé ma réponse utile, veuillez l'upvoter et/ou l'accepter :) (Accepter en cliquant sur la flèche verte.) De plus, vous pouvez simplement commenter ma réponse au lieu d'en poster une nouvelle. – GManNickG