在小示例中,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/

10-11 18:46