"没有命名类型"在Pimpl习语中使用枚举时出错

时间:2014-05-11 15:42:52

标签: c++

这是一个代码示例:

foo.h中

class Foo 
{
    .............
    class Bar;
    Bar* pimpl;
};

Foo.cpp中

class Foo::Bar
{
    enum class PositionsEnum : int
    {
        Extended, Retracted
    };
    void MoveToPosition(PositionsEnum pos);
    PositionsEnum GetPosition();
};

void Foo::Bar::MoveToPosition(PositionsEnum  pos) {}

PositionsEnum Foo::Bar::GetPosition() {}

GetPosition方法上,我得到error: 'PositionsEnum ' does not name a type

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

使用类

添加前缀PositionsEnum
Foo::Bar::PositionsEnum Foo::Bar::GetPosition() {}

答案 1 :(得分:1)

替换

class Bar

class Foo::Bar

附录:现在您已修复了第一个错误,并以合理,非冗长的方式修复了下一个错误。即,替换

PositionsEnum Foo::Bar::GetPosition() {}

没有编译,

auto Foo::Bar::GetPosition() -> PositionsEnum {}

编译。

区别在于查找范围PositionsEnum