为什么C ++不允许这个默认值?

时间:2010-03-23 00:33:39

标签: c++ templates gcc

为什么GCC不允许这里使用默认参数?

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

这是我得到的输出:

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)’

谁能明白我为什么会这样?

3 个答案:

答案 0 :(得分:8)

您似乎已经在graph.h第36行声明了该函数(包括默认参数)。不要在函数实现中重复默认值,在声明中指定它一次就足够了。 / p>

答案 1 :(得分:2)

您已指定其中一个模板参数:

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

将其更改为匹配:

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

答案 2 :(得分:2)

默认参数只能在方法声明中给出,而不是定义