gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:57 27 4
gpt4 key购买 nike

我有抽象类的这个问题,我在互联网上到处查找(包括这里 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/

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