C++ c++;间接层次与间接层次不同

C++ c++;间接层次与间接层次不同,c++,C++,我在尝试编译时收到以下错误消息: 错误C2556:“int*Encrypt(const-BinaryBuffer&,const-EncryptionKey&”):重载函数与“BinaryBuffer-Encrypt(const-BinaryBuffer&,const-EncryptionKey&)”仅在返回类型上不同 错误C2040:'Encrypt':'int*(const BinaryBuffer&,const EncryptionKey&)'与'BinaryBuffer(const Bi

我在尝试编译时收到以下错误消息:

  • 错误C2556:“int*Encrypt(const-BinaryBuffer&,const-EncryptionKey&”):重载函数与“BinaryBuffer-Encrypt(const-BinaryBuffer&,const-EncryptionKey&)”仅在返回类型上不同

  • 错误C2040:'Encrypt':'int*(const BinaryBuffer&,const EncryptionKey&)'与'BinaryBuffer(const BinaryBuffer&,const EncryptionKey&')的间接寻址级别不同

  • 错误C2556:'char*Decrypt(const-BinaryBuffer&,const-EncryptionKey&'):重载函数与'BinaryBuffer-Decrypt(const-BinaryBuffer&,const-EncryptionKey&')仅在返回类型上不同

  • 错误C2040:“解密”:“char*(const BinaryBuffer&,const EncryptionKey&)”与“BinaryBuffer(const BinaryBuffer&,const EncryptionKey&)”的间接寻址级别不同

cpp文件:

#include "Encryption.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 auto byte)
    {
        const auto shifted = _rotr8(byte, numberOfBitsToRotate);
        const auto xored = shifted ^ xorKey;
        return xored;
    });

    return result;
}
我做错了什么


谢谢。

函数的返回类型与标题中的声明不匹配。

您的“二进制”缓冲区的类型为
int*
,这真是奇怪。通常是
无符号字符*
。您可能会根据实际需要分配4倍或8倍的内存。您的意思是什么?我不明白头声明了一个名为
加密
的符号,其签名接受对
二进制缓冲区
加密密钥
的常量引用。返回类型不是签名的一部分(这只是意味着不能单独重载返回类型),而是函数类型的一部分。稍后,编译器会在.cpp文件中看到您对
Encrypt
函数的定义。它知道这是同一符号的定义,因为签名(范围、名称和参数)是相同的。但是返回类型不同(
int*
而不是
BinaryBuffer
),因此它会抱怨。
解密也一样。谢谢:)但现在我遇到了另一个错误:错误C2678:二进制“[”:找不到接受“const EncryptionKey”类型的左操作数的运算符(或者没有可接受的转换)。不管
二进制缓冲区是什么,它显然没有实现
[]
,或者至少是
常量的版本。
#pragma once

#include "Common.h"

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