我有一个关于真正让我困惑的事情的问题!
我们在这里观看这段代码:
#ifndef HEADER_H
#define HEADER_H
#include <iostream>
class example;
class anything_else;
class A {
public:
A();
};
...
class example;
和class anything_else;
是什么意思,而class A {};
被宣布?在CPP文件中我看到像void example::release() { ... }
等定义......
我真的很困惑,有没有人有class example;
的例子......?
class example;
和class anything_else;
是什么意思
它们是example
和anything_else
类的声明。它们告诉编译器这些是有效的类名。这种声明被非正式地称为“前瞻性声明”。
而
class A {};
被宣布?
class A
得到了定义。
在CPP文件中我看到像
void example::release() { ... }
等定义......
这就是函数example::release
的定义。
在example
定义的某处,有函数的声明:
class example
{
// ...
void release(); // declaration
};
如果example
仅被声明且未定义,那么example::release
的定义会导致编译错误。
如果您想拥有尚未包含的类型的成员变量,请执行该类型的前向声明。
class X;
forward声明了类X,所以你可以拥有一个。例如在我们的类声明中指向该类的指针。
class Y
{
...
X* p;
};
稍后您必须在.cpp文件中的某处提供类的定义。