将代码从Classes as parameter of function c++复制到我的代码后,我收到错误:note: because the following virtual functions are pure within 'TEA':
和XTEA,但只有这两个函数。其他功能,AES,BLOWFISH,CAMELLIA,RC4,RC5,RC6等都可以使用。它只是那两个错误的函数。我不明白为什么。
代码(稍加修改):
class CryptoAlgorithm
{
public:
virtual std::string encrypt(std::string DATA) = 0;
virtual std::string decrypt(std::string DATA) = 0;
virtual void setkey(std::string KEY) = 0;
};
和TEA setkey()
void setkey(std::string KEY,
unsigned int ROUNDS = 64,
uint32_t DELTA = 0x9e3779b9, uint32_t TOTAL = 0xc6ef3720)
其他类中的所有函数都是相同的。加密/解密只有std::string DATA
作为参数。 void setkey
有std::string KEY
和其他可选参数。但是,像RC6这样的函数setkey
也有其他可选参数不会出错。
有什么理由?
此外,所有课程的声明旁边都有: public CryptoAlgorithm
。
答案 0 :(得分:4)
虚函数实现'定义必须与抽象类定义中的纯虚函数具有相同的原型,否则编译器将它们视为不同的函数(它们变为重载),您还需要实现每个纯虚函数该类不是抽象的(当然它也不能定义自己的纯虚函数)。修复它的选项是让你的实现类只用一个字符串参数实现setKey
(以匹配虚拟原型),然后为重载设置一个单独的函数(这可能会导致然而,ambiguos从默认参数调用。
答案 1 :(得分:3)
您无法创建抽象类的对象。您需要覆盖派生类中的纯虚函数,以便能够创建派生类的对象。
答案 2 :(得分:1)
=0;
在C ++中是纯虚拟的,这意味着你必须在CryptoAlgorithm的子类中实现这些函数。
正如Als所说,你无法从纯虚拟(抽象)类创建对象。