我有这些对象,我们将其称为“ MyGroup”。 MyGroup子类BaseGroup。作为一个实时系统,我们没有奢侈的动态内存分配,因此我们有一个ObjectPool可以分配一定数量的给定类型的对象。因此,在这种情况下,我说分配了10个MyGroup对象。现在-我想将这些组存储在键值映射中。因此,我创建了一个FiniteMap模板类,以创建具有给定大小的通用地图,该地图可以存储给定类型的对象。我的GroupList类子类FiniteMap,但仍允许参数<G, S>,因为我不知道要存储在GroupList中的BaseGroup子类。BaseGroup::createGroup()方法是纯虚拟的,因此在MyGroup中实现。所以-问题是,在标记为// ***的行中,我在编译时得到以下两个值之一:警告:Unable to resolve template based identifier createGroup,或者如果我实际调用getOrCreateGroup()方法,则出现错误:。GroupList对象在主要逻辑中实例化:GroupList<MyGroup, 10> myGroupList;有任何想法吗?我有以下模板类:template <class T, unsigned int S>class FiniteMap{ // class to implement an array of these types of structures. // Contains methods for put, remove, get, etc. struct Entry { int key; T* pObject; bool inUse; Entry() : key(0), pObject(NULL), inUse(false) {} }}template <class G, unsigned int S>class GroupList : public FiniteMap<G, S>{ // ... G* getOrCreateGroup(unsigned int groupNumber) { G* pGroup = this->get(groupNumber); if (pGroup == NULL) { pGroup = G::createGroup(groupNumber); // *** if (pGroup == NULL) { // handle error } } return pGroup; }}class BaseGroup{public: virtual BaseGroup* createGroup(unsigned int groupNumber) = 0;protected: unsigned int _groupNumber;}class MyGroup : BaseGroup{public: virtual MyGroup* createGroup(unsigned int groupNumber) { MyGroup* g = MyGroupPool.New(); // Object pool allocation if (g == NULL) { // handle error } else { g->_groupNumber = groupNumber; } return g; }} (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 你不能打电话G::createGroup();因为createGroup不是静态的,您也不是从G继承的。您是要使createGroup静态化吗? (也是非虚拟的)我不清楚这是为什么虚拟的。 (adsbygoogle = window.adsbygoogle || []).push({});
08-03 22:05