Visual Studio在超类

时间:2017-07-12 13:34:27

标签: c++

我有一个抽象的超类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将在子类之前编译。哎呀,我甚至没有在我的主要或超类头中包含子类。是什么给我以及如何解决它?

提前致谢!

0 个答案:

没有答案