枚举有问题

时间:2012-02-01 08:15:34

标签: c++

我有类似的事情:

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编译。

3 个答案:

答案 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