我有类似的事情:
enum Direction{Forward,Backward};
template<Direction dir = Forward>
class X
{
private:
Direction my_direction_;
public:
void set_direction(Direction dir)//here I'm getting an error
{
my_direction_ = dir;
}
};
错误:'Direction dir'的声明
有什么理由吗?顺便说一句,它确实用VS2010编译。
答案 0 :(得分:8)
更改:
template<Direction dir = Forward>
到
template<Direction direction = Forward>
error on gcc 更具描述性:
prog.cpp: In member function ‘void X<dir>::set_direction(Direction)’:
prog.cpp:11: error: declaration of ‘Direction dir’
prog.cpp:3: error: shadows template parm ‘Direction dir’
答案 1 :(得分:2)
将其更改为:
void set_direction(Direction _dir = dir)
{
my_direction_ = _dir;
}
方法参数不应与模板参数名称相同。
答案 2 :(得分:2)
因为您之前在模板行中定义了dir
在构造函数
中将其名称更改为_dir