我有一个抽象的超类KFilter
,其中包含一个静态地图成员static map<KFILTER_TYPE, FilterFactory*> factories;
。正如您所看到的,我使用工厂,并且此映射通过自定义枚举KFILTER_TYPE
为每个子类分别具有相应的映射。现在,我在超类的cpp文件中初始化factories
映射:
//KFilter.cpp
<KFILTER_TYPE, FilterFactory*> KFilter::factories = <KFILTER_TYPE, FilterFactory*>();
为了自动绑定工厂,我有一个宏#define REGISTER_TYPE(filterName, filterENUM)
,我在每个子类的顶部使用它,如REGISTER_TYPE(EKFilter, EKF)
。这使用一条线将子类的工厂注册到超类的地图。
但是,我收到Exception thrown: read access violation.
的运行时错误。在四处奔走之后,我发现这是因为在超类的cpp中初始化静态映射之前,在子类中执行的宏被称为。我的问题是,为什么会发生这种情况?我认为超类,其.h和.cpp将在子类之前编译。哎呀,我甚至没有在我的主要或超类头中包含子类。是什么给我以及如何解决它?
提前致谢!