我有一个关于真正让我困惑的事情的问题!
让我们在这里观看这段代码:
#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;
的例子?
答案 0 :(得分:7)
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
的定义会导致编译错误。
答案 1 :(得分:2)
如果您想拥有尚未包含的类型的成员变量,请执行该类型的前向声明。
class X;
forward声明类X,所以你可以拥有一个。例如在我们的类声明中指向该类的指针。
class Y
{
...
X* p;
};
稍后您必须在.cpp文件中的某处提供类的定义。