【发布时间】:2019-10-18 15:50:42
【问题描述】:
不久前,我试图实现自己的 v-tables(用于教育目的)。为此,我使用了函数指针和 lambda。在这样做的过程中,我偶然发现了一个问题。我没有发布整个 v-table 代码,而是编写了一个 Minimal Reproducible Example。
由于某种原因,它无法编译(C2027 - 使用未定义类型测试):
class Test
{
int n;
static inline auto f = [](Test* t)
{
return t->n;
};
};
即使我像这样转发声明Test:class Test;。
我很好奇是什么导致了这种行为,因为 int n 和 class Test 都是在 lambda 之前声明的。
我正在使用带有 C++17 的最新 Visual Studio 2019。
【问题讨论】:
-
在定义类之前不能使用它。
t->n;尝试使用该类。 -
如果它是内联的并且函数是在类本身中定义的,为什么要使用 lambda?
标签: c++ pointers lambda compiler-errors c++17