我不太确定会发生什么,但请看以下几点:
class A{
}-
class B{
#include "A.h"
}-
class C{
#include "B.h"
}现在,如果我在C类中编写代码,是不是意味着A类也会自动包括在内?据我所知,#include基本上直接复制了整个文件。
有没有人能详细说明一下?
我正在尝试尽可能多地使用类转发。但有时我就是做不到。
编辑:
上面的类不在同一个文件中。想象一下他们分开了。
编辑II:让我把它放在更多的上下文中。
假设我正在创建一个包含类B的新类,但是我声明了一个类型为A的变量。这似乎是编译的,尽管我从未将A包含到类中。在C++中是这样的吗?
发布于 2012-08-14 01:52:32
这基本上会在类B中声明一个名为A的嵌套类。
include指令应该位于文件顶部以外的其他位置的情况非常少见,而且通常具有与您所拥有的完全不同的用途。
如果我正确理解了您的文件层次结构,它等同于:
//A.h
class A{
};
//B.h
class B{
class A{
};
};
//C.h
class C{
class B{
class A{
};
};
};发布于 2012-08-14 01:52:58
您说得对,预处理器只是将头文件复制进去。如果你愿意,可以把它想象成一个长宏。
发布于 2012-08-14 01:57:04
#include指令只是告诉编译器假装指定文件中的文本是在#include指令出现的地方编写的。它与作用域、语法或任何其他内容无关。它只是简单的文本。
如果看不到A.h和B.h的内容,就不可能进一步说明这些#include指令的作用。
https://stackoverflow.com/questions/11939543
复制相似问题