c++ - 在类中定义的类型在实现中不被识别为方法的返回类型

我很惊讶为什么当我将其用作同一类的方法的返回 value 时,无法识别类中带有 using 的自定义类型。

在此示例中,Pair 在类定义中被很好地识别,但在 createPair() 的实现中却没有:

#include <utility>

class A
{
public:
    using Pair = std::pair<int, int>;
    Pair createPair();
};


Pair A::createPair()
{
    return {0, 0};
}

显示的错误是:

error: ‘Pair’ does not name a type
      | Pair A::createPair()
      | ^~~~

为什么?有没有办法解决这个问题?

回答1

问题是要使用别名 Pair 我们必须在类 A 的范围内,我们可以通过使用范围解析运算符 ::Pair 限定为 A 来做到这一点,如下所示:

//--vvv----------------------->note the A:: part
    A::Pair A::createPair()
    {
        return {0, 0};
    }

https://wandbox.org/permlink/sDSBozeZQufD0HBj

回答2

除了 https://stackoverflow.com/a/72289912/941531A::Pair 解决方案之外,还可以执行以下花哨的操作来避免指定 A::

https://godbolt.org/z/Gz9d7333z

auto A::createPair() -> Pair
{
    return {0, 0};
}

相似文章

最新文章