为什么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)’
谁能明白我为什么会这样?
答案 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)
默认参数只能在方法声明中给出,而不是定义