在 Scott Meyers 的Effective C++: 55 Specific Ways to Improvement Your Programs and Designs(第 3 版)中,他在第 4 项中描述了在不同翻译单元中定义的非本地静态对象的初始化如何崩溃,并提供了一堆示例代码。
但是,我对代码布局感到困惑,应该是什么?
我试过的:
fileSystem.h
#include <iostream> class FileSystem { public: std::size_t numDisks() const; };
fileSystem.cpp
#include "fileSystem.h" std::size_t FileSystem::numDisks() const { return 1; } extern FileSystem tfs;
directory.h
class Directory { public: Directory(); };
directory.cpp
#include <iostream> #include "fileSystem.h" #include "directory.h" Directory::Directory() { std::size_t disks = tfs.numDisks(); std::cout << disks << std::endl; } Directory tempDir; int main() { return 0; }
而在执行g++ directory.cpp fileSystem.cpp
的时候,结果是这样的:
directory.cpp: In constructor ‘Directory::Directory()’:
directory.cpp:7:25: error: ‘tfs’ was not declared in this scope
7 | std::size_t disks = tfs.numDisks();
|
我#include
对 C++ 中的内容有些不安,我希望它不会妨碍我理解有效 C++ 第 4 条中示例代码的正确布局。