我正在学习C++,我原以为包含某些内容只会影响到包含它的文件,但是我似乎错了。我的设置如下:
如果我在Main或Subclass(扩展BaseClass)中都不包含BaseClass.h,那么当我在Subclass中使用BaseClass时,会出现一个看似正常的错误提示我不能使用BaseClass,因为它不存在。如果我在Subclass.h中包含BaseClass.h,一切都正常工作。如果我不在Subclass.h中包含BaseClass.h,但我在主cpp中包含它,也可以正常工作?起初,我以为这意味着在一个文件中包含某些内容会将其包括在整个项目中,但我对此并不确定,因为BaseClass.cpp一直包含BaseClass.h,当它未包含在main/Subclass中时,我会得到一个错误。为什么我能够在主cpp和Subclass.h之间交替包含BaseClass.h,同时使其在两种情况下都起作用?当我包含某些内容时,有多少文件受到影响?
我正在使用Eclipse Neon和MinGW GCC项目,但我不确定它是否会影响行为。这是我正在使用的源代码:
主cpp,ReproProject.cpp:
#include <iostream>
#include "BaseClass.h"
#include "Subclass.h"
using namespace std;
int main() {
Subclass s;
cout << "Hello World!" << endl; // prints !!!Hello World!!!
return 0;
}
BaseClass.h
#pragma once
class BaseClass
{
public:
BaseClass();
};
BaseClass.cpp
#include "BaseClass.h"
BaseClass::BaseClass()
{
}
Subclass.h
#pragma once
class Subclass: public BaseClass
{
public:
Subclass() : BaseClass() {}
};