C++ c++;“没有合适的转换函数”;常量二进制缓冲区“;至;int*”;
如何修复此问题以编译它?C++ c++;“没有合适的转换函数”;常量二进制缓冲区“;至;int*”;,c++,binary,key,type-conversion,C++,Binary,Key,Type Conversion,如何修复此问题以编译它? 我有3个文件,我真的需要帮助 我希望你能这样做,因为我已经尝试了我所知道的一切:( 档案: Encrypt.cpp #include "Encrypt.h" #include <algorithm> #include <iterator> #pragma intrinsic(_rotl8, _rotr8) constexpr auto xorKeyLocation = 0; constexpr auto numberOfBitsToRota
我有3个文件,我真的需要帮助 我希望你能这样做,因为我已经尝试了我所知道的一切:( 档案:
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;
}
公共卫生:
#pragma once
#include <vector>
using BinaryBuffer = std::vector<unsigned char>;
using EncryptionKey = BinaryBuffer;
#pragma一次
#包括
使用BinaryBuffer=std::vector;
使用EncryptionKey=BinaryBuffer;
有人能帮我吗?
谢谢:)在
Encrypt.h
中转发这些声明:
BinaryBuffer Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key);
BinaryBuffer Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key);
与Encrypt.cpp
中的实现不匹配。它们被前向声明为返回BinaryBuffer
,但实现分别返回int*
和char*
(这将触发另一个编译时错误,因为您不能重载返回类型)。所以当您尝试返回结果时代码>,编译器推断您希望将本地BinaryBuffer
对象转换为这些类型的指针,并且没有可用的隐式转换运算符
将Encrypt.cpp
中函数的返回类型更改为BinaryBuffer
旁注,result
变量不应声明为const
。您可以通过std::back\u inserter()
间接修改它们,这将导致另一个编译错误。您尝试了什么?他们又犯了什么错误?祝“沙巴尼克”好运。。试着自己解决挑战-1因为你试图欺骗……你真的不应该发表那篇文章,请尊重我们,嗯?欺骗你什么意思?@t银行为什么不呢?:太多了!我甚至不知道我为什么这么做!!:D但是,在Encrypt.cpp的第37行“const auto numberOfBitsToRotate=key[(std::vector)numberOfBitsToRotateLocation];”中仍然存在一个问题;我收到错误“no operator”[]”匹配这些操作数:const EncryptionKey[std::vector]“。。。你能帮我整理一下吗?@AnonymousUser整个表达毫无意义numberOfBitsToRotateLocation
的类型为int
,但您要将其强制转换为std::vector
,然后尝试使用它来索引std::vector
。将int
转换为std::vector
是毫无意义的,尝试用另一个向量索引一个向量也是如此。我不确定你需要做什么来修复它,因为我不确定它首先应该做什么。我知道,我被赋予了修复它并使其编译的任务。。。如果你能帮助我,我将非常感激@匿名用户“使其编译”和“使其正确工作”是两个不同的目标。我可以帮助第一个,但不太可能有效地帮助第二个。请帮助我完成第一个:)
BinaryBuffer Encrypt(const BinaryBuffer& plainText, const EncryptionKey& key);
BinaryBuffer Decrypt(const BinaryBuffer& cipherText, const EncryptionKey& key);