我怎么能解决这个问题才能编译呢? 我有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;
有人能帮帮我吗? 谢谢:))
答案 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()
间接修改它们,这将导致另一个编译错误。