在小示例中,needExtern.cpp需要global::bar
的定义。 needsExtern.cpp通常将包含具有定义的文件(在本例中为main.cpp)。但是,由于文件为main.cpp,因此不需要。
为什么needsExtern.cpp不需要包含main.cpp?
needsExtern.h
struct NeedsExtern
{
NeedsExtern();
};
needsExtern.cpp
#include "needsExtern.h"
#include <iostream>
namespace global
{
extern const int bar;
}
NeedsExtern::NeedsExtern()
{
std::cout << global::bar << "\n";
}
main.cpp
#include "needsExtern.h"
namespace global
{
extern const int bar{26};
}
void main()
{
NeedsExtern ne;
}
最佳答案
这正是发明extern
的地方:编译器仅假定变量在项目的其他位置定义。您可以阅读有关here原理的更多信息。
关于c++ - 为什么我不需要包含main.cpp?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31754193/