error C2079 类的前置声明

如下代码,可运行:
void A();

void test()
{
A();
}

void A() {};
但是我把void改成class时候却运行失败:
class A;

void test()
{
A a;
}

class A {};
当然如果用指针的话还是可以的,然而并没什么用,因为指针声明后就没有然后了。

 class A;

void test();

class A 
{
public:
    int x;
    A() {}
};

void test()
{
    A *a = new A();
    a->x = 1;
}

int main()
{
    test();
}

指针定义后,需要 new,之后和非指针定义的变量是一样的。

因为指针声明后就没有然后了。
什么意思?为什么没用?

A *a = new A();
a->成员

你们两个不是冤家吗 居然被我碰到了

如果A a;的话 error C2079: “a”使用未定义的 class“A”
如果 A * a = new A;的话 error C2512: “A”: 没有合适的默认构造函数可用
即使我添加了构造函数

class A;
void test()
{
A * a = new A;
}
class A {
public:
A() {}
};