【发布时间】:2021-09-07 18:29:48
【问题描述】:
我对 c++ 还很陌生,我正在制作一个加密器来改进我的 c++,起初我将 Cryptographer 类保存在 cryptographer.hpp 中,然后在 cryptographer.cpp 中添加了函数体,然后将 cryptographer.hpp 包含在 main.cpp 中它给了我一个编译器错误,所以我只是像这样将代码粘贴到main.cpp 中
#include <iostream>
#include <map>
class Cryptographer{
public:
int n_factor;
std::string text;
Cryptographer(std::string user_arg, int user_n_factor);
struct cryptographer
{
std::string encrypted_text;
std::string generated_key="";
};
cryptographer crypted_text;
void generate_key();
void encrypt();
void decrypt();
std::string get_key();
std::string get_text();
};
using key_map = std::map<char, std::string[5]>;
void Cryptographer::generate_key(){
for (int _ = 0; _ < 5; _++){
crypted_text.generated_key += rand() % 26 + 65;
}
}
void Cryptographer::encrypt(){
generate_key();
key_map keyHashMap;
for (auto key_letter: crypted_text.generated_key){
int key_letter_int = (int) key_letter;
std::string key_letter_arr[5];
int memory_number = key_letter_int;
for (int index=0; index < 5; index++){
if (memory_number+n_factor > 91){
memory_number = 65;
}else{
key_letter_arr[5] = std::string(1, char (memory_number + n_factor));
memory_number += n_factor;
}
}
keyHashMap.emplace(key_letter, key_letter_arr);
}
for(int index=0; index<text.size(); index++){
int key = index %4;
int key_patter = rand()% 4;
int checking_index = 0;
for (auto &elem: keyHashMap){
if (checking_index == key){
std::cout << elem.second[1];
}
}
}
crypted_text.encrypted_text = "test";
}
Cryptographer::Cryptographer(std::string user_arg, int user_n_factor):
text(user_arg), n_factor(user_n_factor)
{}
int main(){
Cryptographer crypter("hello guys", 3);
crypter.encrypt();
std::cout << crypter.get_text();
return 0;
}
并在我的终端中运行它
g++ main.cpp -o test
它弹出了这个大错误
https://hastebin.com/cibeyanoro.cpp
我使用的是 ubuntu 20.04,我也尝试删除并重新安装最新版本的 g++,但弹出相同的错误。
【问题讨论】:
-
using key_map = std::map<std::string, std::string[5]>;你确定你想要一个包含五个字符串的数组吗?如果是这样,您可能想要std::array<std::string, 5>而不是 C 风格的std::string[5]。 -
还有一些东西绝对是错误的。
std::string key_letter_arr[5];然后访问key_letter_arr[5]是不正确的。key_letter_arr是一个由 5 个std::string对象组成的数组,key_letter_arr[5]将是第六个这样的对象。我建议尝试在两次尝试编译之间编写更少的代码,并确保它按预期工作。 -
@NathanPierson 哦,是的,第二个可能是我的一些粗心,我还需要包含
array来做使用的事情吗? -
是的,如果你想使用
std::array,你需要#include <array>。 -
在那条巨大的错误消息中,请注意
main.cpp:46:54: required from here行。它指向您的main.cpp中的第 46 行。整个消息归结为你不能打电话给keyHashMap.emplace(char&, string[5])。