ああ、役立つコメントを介して問題を発見しました(削除されました)。
したがって、私のヘッダー ファイルの 1 つobject.h
(含まれていませんCommunicator
が、動作するオブジェクトCommunicator
) は、実際には次のようになります。
-- obj_version and tkt_metadata
-- #include "communicator.h"
-- more stuff
私の実装ファイルは次のようなものでした:
-- #include "communicator.h"
-- define the functions
-- Communicator comm;
ただし、コメントの誰かが C++ の「コンパイル ユニット」に言及しました。ヘッダーはそれ自体ではコンパイルされず、実装ファイルのみがコンパイルされ、ヘッダーは実装ファイルごとに配置されるだけです。
したがって、Communicator
(object.h で) 表示する必要のあるオブジェクトの後に my が含まれていましたが、実装ファイルには communicator.h のみが含まれており、object.h (これには communicator.h が含まれています) は含まれていませんでした。コンパイル ユニットは、名前空間 obj 内のオブジェクトが定義されていない状態で Communicator をコンパイルしようとしました。
したがって、答えは communicator.cc に入れることです。
-- #include "objects.h"
-- define the functions
-- Communicator comm;
これはかなり単純な問題です (そして、私が提供した情報だけではおそらく誰も答えられなかったでしょう) が、おかげで私の誤解が解けました!