例如:
abstract class goal
class priority
class childgoal
multimap<priority, goal> mm;
mm.insert(make_pair(priority(), childgoal());
我收到错误:
cannot declare field 'std::pair<priority, goal>::second'
to be of abstract type 'goal'
如果我没记错的话,Pair 使用默认构造函数在分配之前创建第二个,这就是造成困扰的原因。我可能不正确,但它可以解释错误。
如何解决这个问题...当其中一种类型是抽象的时,如何完成插入多重映射(或可能是映射)?
最佳答案
您可以制作指针 map :
#include <memory>
#include <map>
class Base { };
class Derived1 : public Base { };
class Derived2 : public Base { };
typedef std::shared_ptr<Base> MyPtr;
typedef std::multimap<Key, MyPtr> MyMap;
int main()
{
MyMap m { { Key(1), MyPtr(new Derived1) }, { Key(2), MyPtr(new Derived2) } };
}
统一初始化语法需要C++11支持。在旧版本中,您可以插入:
m.insert(MyMap::value_type(Key(1), MyPtr(new Derived1)));
如果没有其他人需要映射的对象,您可能会得到 std::unique_ptr<Base>
反而。更改 typedef 很简单。
关于c++ - : Insert pair into multimap, 其中一种类型如何是抽象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8013216/