为什么我会这样:
error: invalid application of 'sizeof' to incomplete type 'A'
当我尝试这样做时:
class A
{
int m_i;
static char m_j[sizeof(A)];
};
我假设在这种情况下很明显sizeof(A)将是sizeof(int)。但我的编译器似乎并不这么认为。
答案 0 :(得分:5)
正如错误消息所示,sizeof
只能对完整类型进行操作。在您调用它时,A
未完成。
答案 1 :(得分:1)
C ++编译器从上到下分析您的代码。您调用sizeof
时未完全定义您的类,因此,大小尚未确定。例如,如果另一个成员声明低于该行,该怎么办:
class A
{
int m_i;
static char m_j[sizeof(A)]; // Uh oh, m_i2 is not known here, yet
int m_i2;
};
由于这样的问题,只有在完全定义了类之后,即在结束大括号之后才能使用sizeof
。
答案 2 :(得分:0)
如果您使用模板,则可以:
template <class = void>
struct A {
int i;
static auto& m_j() {
static char arr[sizeof(A)];
return arr;
}
};
int main()
{
auto array = A<>::m_j();
}
编译器一直等到使用m_j
来实例化该函数,此时A
已被完全声明。
实例here