“类示例;”在头文件中的含义是什么?

问题描述 投票:0回答:2

我有一个关于真正让我困惑的事情的问题!

我们在这里观看这段代码:

#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;的例子......?

c++ class oop syntax header-files
2个回答
7
投票

class example;class anything_else;是什么意思

它们是exampleanything_else类的声明。它们告诉编译器这些是有效的类名。这种声明被非正式地称为“前瞻性声明”。

class A {};被宣布?

class A得到了定义。

在CPP文件中我看到像void example::release() { ... }等定义......

这就是函数example::release的定义。

example定义的某处,有函数的声明:

class example
{
// ...
    void release(); // declaration
};

如果example仅被声明且未定义,那么example::release的定义会导致编译错误。


2
投票

如果您想拥有尚未包含的类型的成员变量,请执行该类型的前向声明。

class X;

forward声明了类X,所以你可以拥有一个。例如在我们的类声明中指向该类的指针。

class Y
{
...
  X* p;
};

稍后您必须在.cpp文件中的某处提供类的定义。

© www.soinside.com 2019 - 2024. All rights reserved.