3

研究のために有限要素コードを実装しようとしています。名前でマテリアルにアクセスできるように、マテリアルとその名前を関連付けるマップを作成する必要があります。メイン クラスのヘッダー ファイルから、次のように定義します。

/// Friend class definition for the materials
friend class Material; 
/// Class definition for the materials
class Material; 

/// Creates a dictionary of elementsets vs material names
std::map<std::string,std::string>  _material_assignment; 

/// Container to hold the material names of all the materials
std::map<std::string,Material> _materials; 

メイン クラスの実装がコンパイルされます。ただし、メイクファイルがメインファイルに到達すると、次のエラーが発生します

Error: 'std::pair<_T1, _T2>::second' has incomplete type
       _T2 second;                /// @c second is a copy of the second object
       ^
In file included from src/main.C:5:0:
src/diff_code.h:228:9: error: forward declaration of 'class DiffCode::Material'
   class Material;

どうすればこれを回避できますか。重要なコード クラスのヘッダー ファイルをすべて含むコードの他のすべてのファイルをコンパイルしています。

ありがとう!

4

2 に答える 2

4

標準では、ライブラリ内のテンプレートをインスタンス化するために使用される型がインスタンス化の時点で完全である必要がありますが、文書化されているいくつかの例外があります (例: std::shared_ptr<T>)。型の完全な定義を提供しないと、コードを修正できませんMaterialつまり、宣言されたばかりの型で stl コンテナーをインスタンス化することはできません。

于 2013-06-24T22:39:33.823 に答える