加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 不存在类的默认构造函数

发布时间:2020-12-16 07:52:59 所属栏目:百科 来源:网络整理
导读:#include "Includes.h"enum BlowfishAlgorithm { ECB,CBC,CFB64,OFB64,};class Blowfish{public: struct bf_key_st { unsigned long P[18]; unsigned long S[1024]; }; Blowfish(BlowfishAlgorithm algorithm); void Dispose(); void SetKey(unsigned char d
#include "Includes.h"


enum BlowfishAlgorithm
    {
        ECB,CBC,CFB64,OFB64,};

class Blowfish
{
public:
    struct bf_key_st
    {
        unsigned long P[18];
        unsigned long S[1024];
    };
    Blowfish(BlowfishAlgorithm algorithm);
    void Dispose();
    void SetKey(unsigned char data[]);
    unsigned char Encrypt(unsigned char buffer[]);
    unsigned char Decrypt(unsigned char buffer[]);
    char EncryptIV();
    char DecryptIV();
private:
    BlowfishAlgorithm _algorithm;
    unsigned char _encryptIv[200];
    unsigned char _decryptIv[200];
    int _encryptNum;
    int _decryptNum;
};

class GameCryptography
{
public:
    Blowfish _blowfish;
    GameCryptography(unsigned char key[]);
    void Decrypt(unsigned char packet[]);
    void Encrypt(unsigned char packet[]);
    Blowfish Blowfish;
    void SetKey(unsigned char k[]);
    void SetIvs(unsigned char i1[],unsigned char i2[]);
};




GameCryptography::GameCryptography(unsigned char key[])
{
}

错误:IntelliSense:没有默认的构造函数存在类“Blowfish”???!

解决方法

如果你定义一个没有任何构造函数的类,那么编译器会为你编译一个构造函数(这将是默认的构造函数,也就是说,不需要任何参数).然而,如果你定义一个构造函数(即使它有一个或多个参数),那么编译器也不会为你构建一个构造函数 – 在这一点上,你负责构造该类的对象,所以编译器“退后退”,可以这么说,把这个工作留给你.

你有两个选择.您需要提供默认构造函数,或者在定义对象时需要提供正确的参数.例如,您可以将构造函数更改为:

Blowfish(BlowfishAlgorithm algorithm = CBC);

…所以可以调用ctor(没有(明确))指定一个算法(在这种情况下它将使用CBC作为算法).

另一种方法是在定义Blowfish对象时明确指定算法:

class GameCryptography { 
    Blowfish blowfish_;
public:
    GameCryptography() : blowfish_(ECB) {}
    // ...
};

最后,我想值得一提的是,ECB,CFB等都是运营模式,而不是真正的加密算法本身.调用它们的算法不会打扰编译器,但是不合理地可能会为其他人读取代码造成问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读