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

Nie*_*Wet 2 c++ gcc templates

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

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

这是我得到的输出:

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)’
Run Code Online (Sandbox Code Playgroud)

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

sth*_*sth 8

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