为什么我不需要包含 main.cpp?

Why do I not need to include main.cpp?

小例子中needsExtern.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.