【发布时间】:2013-08-28 19:52:16
【问题描述】:
我正在为学校分析一个操作系统项目,并遇到了这个头文件:
//kernelev.h
#ifndef _KERNELEV_H
#define _EVENT_H_
typedef unsigned char IVTNo;
class Thread;
class PCB;
class KernelSem;
class KernelEv {
public:
KernelEv (IVTNo ivtNo);
~KernelEv();
int wait(int MaxTimeToWait);
void signal();
[...]
现在,在编写这些方法(KernelEv、~KernelEv、wait 和 signal)的完整定义时,他们使用了 Thread、PCB 和 KernelSem 类的属性。通常引入例如#include Thread.h有什么区别; #include KernelSem.h;并且只声明这样的类:class Thread;数据访问权限是否存在差异?还是完全不同?
感谢您的帮助,希望我的问题足够清楚。
【问题讨论】:
-
对我来说听起来不太一样
-
@Dave 听起来不太一样,但答案足以回答这个问题。
-
小心你的包含警卫!您使用的是reserved names,更关键的是,这两个名称不匹配。
-
实际上,前向声明主题对我有用。谢谢你,juanchopanza!
-
使用前向声明的要点(手动打破循环依赖,因为 C++ 解析器本质上是一个单通道解析器)仅在小注释中提及。