gpt4 book ai didi

c++ - 制作一个值类型是 C++ 中的抽象类的映射

转载 作者:行者123 更新时间:2023-12-04 04:41:03 26 4
gpt4 key购买 nike

我有一个抽象类 element和一个子类elasticFrame :

class element
{
public:
virtual Matrix getStiffness() = 0;
protected:
Matrix K;
};


class elasticFrame3d:public element
{
public:
elasticFrame3d(double E, double G);
virtual Matrix getStiffness();
virtual Matrix getTransform();
private:
double E, G;
};

我想要的是制作这样的 map :
map<int, element> elementMap;

但是当我收到此错误时:
error C2259: 'element' : cannot instantiate abstract class

甚至有可能做到这一点吗?如果是,如何?

最佳答案

您将无法创建 element 类型的值因为它具有抽象功能。如果要存储从 element 派生的类型的对象,您需要存储对这些对象的合适的指针或引用。例如,您可以使用 std::unique_ptr<element>std::shared_ptr<element> (您需要包含 #include <memory> )并在合适的内存区域中分配具体对象。

也就是说,你会使用这样的东西:

std::map<int, std::unique_ptr<element>> elementMap;
elementMap[17] = std::unique_ptr<element>(new elasticFrame3D(3.14, 2.71));

顺便说一句,您使用了一种不常用的命名约定:使用 CamelCase 时,类型通常用大写字母书写,对象用小写首字母书写。

关于c++ - 制作一个值类型是 C++ 中的抽象类的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25465224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com