我有一个类,我在课程上面的线程中使用.即使我在顶部做了类的原型,它仍然会抛出那些错误错误C2027:使用未定义类型'foo'
class foo;
DWORD WINAPI demo(LPVOID param)
{
foo a;
}
class foo
{
public:
int x;
};
Run Code Online (Sandbox Code Playgroud)
即使我做了这个类的原型
通过类的前向声明,您可以创建指针和类的引用.这是因为指针/引用在所有类/结构/等中表示相同.它们都只是记忆的地址.因此,例如,您可以在完全定义类之前创建可以接受或包含指针或引用的第二个类,即:
class Bar
{
private:
foo* aFoo;
public:
Bar(foo* foo2) : aFoo(foo2) {}
};
Run Code Online (Sandbox Code Playgroud)
但是,在编译器看到类的完整定义之前,您无法实例化它.否则编译器不知道要分配多少内存以及如何调用构造函数和其他方法.在大多数情况下,C++期望在使用之前定义事物.前向声明让你可以稍微解决这个问题,因为任何类的指针和引用都是相同的.因此,您可以向编译器承诺,稍后您将完全定义它.