c ++没有合适的转换函数来自" const BinaryBuffer" to" int *"

时间:2017-04-27 21:52:49

标签: c++ binary key type-conversion

我怎么能解决这个问题才能编译呢? 我有3个文件,我真的需要帮助!

我希望你能够这样做,因为我已经尝试了我所知道的一切:(

FILES:

Encrypt.cpp

#include "Encrypt.h"
#include <algorithm>
#include <iterator>

#pragma intrinsic(_rotl8, _rotr8)

constexpr auto xorKeyLocation = 0;
constexpr auto numberOfBitsToRotateLocation = 1;

int* Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key)
{
    const auto xorKey = key[xorKeyLocation];
    const auto numberOfBitsToRotate = key[numberOfBitsToRotateLocation];
    const BinaryBuffer result;

    do
    {
        std::transform(
            plainText.begin(),
            plainText.end(),
            std::back_inserter(result),
            [&](const auto byte)
        {
            const auto xored = byte ^ xorKey;
            const auto shifted = _rotl8(xored, numberOfBitsToRotate);

            return shifted;
        });
    } while (0);

    return result;
}

char* Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key)
{
    const auto xorKey = key[xorKeyLocation];
    const auto numberOfBitsToRotate = key[(std::vector<int>)numberOfBitsToRotateLocation];
    const BinaryBuffer result;

    std::transform(
        cipherText.cbegin(),
        cipherText.cend(),
        std::back_inserter(result),
        [&](const double byte)
    {
        const auto shifted = _rotr8(byte, numberOfBitsToRotate);
        const auto xored = shifted ^ xorKey;
        return xored;
    });

    return result;
}

Encrypt.h:

#pragma once

#include "Comm.h"

BinaryBuffer Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key);
BinaryBuffer Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key);

Comm.h:

#pragma once

#include <vector>

using BinaryBuffer = std::vector<unsigned char>;
using EncryptionKey = BinaryBuffer;

有人能帮帮我吗? 谢谢:))

1 个答案:

答案 0 :(得分:0)

Encrypt.h中的这些前瞻性声明:

BinaryBuffer Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key);
BinaryBuffer Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key);

不匹配Encrypt.cpp中的实现。它们被前向声明返回BinaryBuffer,但实现分别返回int*char*(这应该触发另一个编译时错误,因为你不能在返回类型上重载)。因此,当您尝试return result;时,编译器推断您要将本地BinaryBuffer对象转换为这些类型的指针,并且没有可用的隐式转换运算符。

Encrypt.cpp中的函数的返回类型更改为BinaryBuffer

旁注,result变量不应声明为const。您可以通过std::back_inserter()间接修改它们,这将导致另一个编译错误。