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&)”的间接寻址级别不同
#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);