c++ - 错误 c2259 'class' : cannot instantiate abstract class

标签 c++ class vector constructor abstract

我在抽象类方面遇到了这个问题,我在互联网上到处查找(包括这里 https://msdn.microsoft.com/en-us/library/zxt206sk.aspx ),我问了 friend ,但我仍然没有得到答案。

我有一个名为“RulePrvoider”的类,以及从“Rule Provider”继承的另外三个类“GlobalRuleProvider”、“UserRuleProvider”和“OrgRuleProvider”。我还有另一个名为“PacketFilter”的类,这就是我遇到问题的类。

我发现,如果我将“push_back”放在注释中,程序就会编译,但我似乎不明白为什么。

这是PacketFilter.h:

#ifndef _PACKETFILTER_H
#define _PACKETFILTER_H

#include <vector>
#include <set>

#include "OrgRuleProvider.h"
#include "GlobalRuleProvider.h"
#include "UserRuleProvider.h"
class PacketFilter
{
private:
    std::vector <RuleProvider>providers;
    string globalProvider;
    std::set <Rule>rules;
    void update();
public:
    PacketFilter(string globalProviderPath, string* orgProviderPath, string* userProviderPath);
    bool filter(string srcIP, string srcPort, string dstIP, string dstPort, string protocol);
};
#endif

这是 packetFilter 构造函数(这就是我遇到问题的地方):

#include "PacketFilter.h"

PacketFilter::PacketFilter(string globalProviderPath, string* orgProviderPath, string* userProviderPath)
{
    int i;
    RuleProvider* rProv;
    try{
        rProv = new GlobalRuleProvider(globalProviderPath);
    }
    catch (int e){
        std::cout << "exception number " << e << std::endl;
    }
    providers.push_back(*rProv);
    for (i = 0; i <orgProviderPath->size(); i++)
    {
        rProv = new OrgRuleProvider(orgProviderPath[i]);
        providers.push_back(*rProv);
    }
    for (i = 0; i < userProviderPath->size(); i++)
    {
        rProv = new UserRuleProvider(userProviderPath[i]);
        providers.push_back(*rProv);
    }
}

如果有人发现这个问题,我会非常高兴和感激。

提前致谢!

最佳答案

你做不到

std::vector <RuleProvider> providers;

RuleProvider 是抽象类。您无法实例化抽象对象。

你需要做

std::vector <RuleProvider*> providers;

指针则不同——您可以指向抽象类型,因为实际对象本身将是RuleProvider的子类,而不是抽象基类。

当您push_back到 vector 上时,推送您使用new创建的指针;不要使用 * 取消引用它们。

使用完 vector 后,您需要记住删除所有指针。

关于c++ - 错误 c2259 'class' : cannot instantiate abstract class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28153334/

相关文章:

c++ - 快速排序问题 (C++)

python - 基于 mixin 列表的交叉以编程方式定义 python 类的好方法?

json - 在 parse.com 类中存储嵌套的 Json

c# - 静态类分配

c++ - 为什么 std::deque 不是在索引 0 之前保留内存的 vector ?

r - 在 R 中将两个向量合二为一

c++ - 为什么使用 CvScalar

c++ - std::common_type 实现

c++ - 从类型列表创建 vector 元组

java - 客户端-服务器应用程序。总是打开套接字