错误,因为函数在类中是纯虚拟的?

时间:2011-06-16 16:46:36

标签: c++ class inheritance

将代码从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 setkeystd::string KEY和其他可选参数。但是,像RC6这样的函数setkey也有其他可选参数不会出错。

有什么理由?

此外,所有课程的声明旁边都有: public CryptoAlgorithm

3 个答案:

答案 0 :(得分:4)

虚函数实现'定义必须与抽象类定义中的纯虚函数具有相同的原型,否则编译器将它们视为不同的函数(它们变为重载),您还需要实现每个纯虚函数该类不是抽象的(当然它也不能定义自己的纯虚函数)。修复它的选项是让你的实现类只用一个字符串参数实现setKey(以匹配虚拟原型),然后为重载设置一个单独的函数(这可能会导致然而,ambiguos从默认参数调用。

答案 1 :(得分:3)

您无法创建抽象类的对象。您需要覆盖派生类中的纯虚函数,以便能够创建派生类的对象。

答案 2 :(得分:1)

=0;在C ++中是纯虚拟的,这意味着你必须在CryptoAlgorithm的子类中实现这些函数。

正如Als所说,你无法从纯虚拟(抽象)类创建对象。