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++ の内容に少し動揺しています。それが、Effective C++ 項目 4 のサンプル コードの正しいレイアウトを理解する妨げにならないことを願っています。