2010-03-23 3 views
2

Pourquoi GCC n'autorise-t-il pas ici un paramètre par défaut?Pourquoi C++ n'autorise-t-il pas cette valeur par défaut?

template<class edgeDecor, class vertexDecor, bool dir> 
Graph<edgeDecor,int,dir> Graph<edgeDecor,vertexDecor,dir>::Dijkstra(vertex s, bool print = false) const 
{ 

C'est la sortie I get:

graph.h:82: error: default argument given for parameter 2 of ‘Graph<edgeDecor, int, dir> Graph<edgeDecor, vertexDecor, dir>::Dijkstra(Vertex<edgeDecor, vertexDecor, dir>, bool)’ 
graph.h:36: error: after previous specification in ‘Graph<edgeDecor, int, dir> Graph<edgeDecor, vertexDecor, dir>::Dijkstra(Vertex<edgeDecor, vertexDecor, dir>, bool)’ 

Quelqu'un peut-il voir pourquoi j'obtenir cela?

+0

Je ne vois pas pourquoi vous obtenez ceci, parce que vous n'incluez qu'une partie du code pertinent. Vos erreurs se réfèrent aux deux lignes 36 et 82, vous devez donc inclure les deux dans la question. –

+0

Désolé Brooks, bon point. La ligne 36 était le prototype de la fonction dans ma classe. –

Répondre

8

Vous semblez déjà avoir déclaré la fonction (y compris le paramètre par défaut) dans graph.h, ligne 36. Ne répétez pas la valeur par défaut dans la fonction implémentation, en le spécifiant une fois dans la déclaration est suffisant.

2

Vous avez spécifié l'un des paramètres du modèle:

Graph<edgeDecor,int,dir> Graph<edgeDecor,vertexDecor,dir>:: 
       ^^^ 

changement à match:

Graph<edgeDecor,vertexDecor,dir> Graph<edgeDecor,vertexDecor,dir>:: 
+0

Cela ne semble pas poser de problème, après avoir suivi le conseil de sth, cette erreur a disparu. –

2

arguments par défaut doivent être donnés que dans la déclaration de votre méthode, pas à la définition

Questions connexes