我正在尝试为我的研究实现有限元素代码。我需要创建一个将材料与其名称相关联的地图,以便我可以按名称访问它们。 从主类的头文件中,我定义了以下内容:
/// 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;
主类的实现编译。但是,当makefile到达主文件时,我收到以下错误
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;
我如何解决这个问题。我的代码的所有其他文件都包含重要代码类的头文件正在编译。
谢谢!
答案 0 :(得分:3)
该标准要求用于实例化库中模板的类型在实例化时完成,并记录一些例外(例如std::shared_ptr<T>
)。如果不提供Material
类型的完整定义,则无法修复代码。那就是:你不能实例化一个刚刚声明的类型的stl容器。
答案 1 :(得分:1)
您必须定义完整的课程。但是,您可以在容器中放置Material*
,或者如果这不够好,您可以在容器中放置std::unique_ptr<Material>
,这样就可以为您处理内存管理,但仍允许您转发 - 决定你的幸福之路。