我很惊讶为什么当我将其用作同一类的方法的返回 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};
}
回答2
除了 https://stackoverflow.com/a/72289912/941531 的 A::Pair
解决方案之外,还可以执行以下花哨的操作来避免指定 A::
:
https://godbolt.org/z/Gz9d7333z
auto A::createPair() -> Pair
{
return {0, 0};
}