错误 C2679:二进制“<<”:未找到接受 'std::vector<char,std::allocator<char>>' 类型右手操作数的运算符
error C2679: binary '<<': no operator found which takes a right-hand operand of type 'std::vector<char,std::allocator<char>>'
我是 C++ 的新手,我遇到了错误:
error C2679: binary '\<\<': no operator found which takes a right-hand operand of type
'std::vector\<char,std::allocator\<char>>' (or there is no acceptable conversion)
代码如下:
#include <iostream>
#include <random>
#include <vector>
using namespace std;
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
int i = 0;
while (i == 0)
{
int password_length;
cout << "How many characters do you want in the password: ";
cin >> password_length;
if (password_length == 0)
{
cout << "Bye...";
break;
}
else if (password_length < 5 || password_length > 15)
{
cout << "Password must be between 5 and 15 characters." << endl << endl;
return main();
}
int c = 0;
int y = 0;
int random_character_case;
std::vector<char> values(password_length);
for (int x = password_length; x > 0; x--)
{
if (y == password_length - 2)
{
random_character_case = 1;
}
if (c == 2)
{
std::uniform_int_distribution<int> character_ascii_distr(2, 3);
random_character_case = character_ascii_distr(gen);
}
else
{
std::uniform_int_distribution<int> character_ascii_distr(1, 3);
random_character_case = character_ascii_distr(gen);
}
switch (random_character_case)
{
case 1: {
std::uniform_int_distribution<> numbers_ascii_distr(48, 57);
char asciiValue = numbers_ascii_distr(gen);
values.push_back(asciiValue);
c++;
break;
}
case 2: {
std::uniform_int_distribution<> capital_ascii_distr(65, 90);
char asciiValue = capital_ascii_distr(gen);
values.push_back(asciiValue);
y++;
break;
}
case 3: {
std::uniform_int_distribution<> lowercase_ascii_distr(97, 122);
char asciiValue = lowercase_ascii_distr(gen);
values.push_back(asciiValue);
y++;
break;
}
}
}
cout << values;
values.clear();
cout << endl << endl;
}
}
尝试编写代码以用户输入的长度生成一组随机字符,其中混合了随机的小写和大写字符,以及在集合中随机位置的两个随机数字。
我想强调一下我很新;因此我也很期待看到更有效的方法去做我想做的事情,如果有的话。
在这一行
cout << values;
您正在尝试为 char
的向量调用 std::basic_ostream::operator<<
(即 std::vector<char> values
)。这没有定义,因此编译器不知道它。因此,错误。
您需要遍历 char
个向量的元素(即 values
)。例如,使用基于范围的 for 循环:
for (const char ele : values)
std::cout << ele << " ";
也就是说,您可以简单地使用标准中提供的 std::string
instead of std::vector<char>
for which you have already operator<<
。
我是 C++ 的新手,我遇到了错误:
error C2679: binary '\<\<': no operator found which takes a right-hand operand of type
'std::vector\<char,std::allocator\<char>>' (or there is no acceptable conversion)
代码如下:
#include <iostream>
#include <random>
#include <vector>
using namespace std;
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
int i = 0;
while (i == 0)
{
int password_length;
cout << "How many characters do you want in the password: ";
cin >> password_length;
if (password_length == 0)
{
cout << "Bye...";
break;
}
else if (password_length < 5 || password_length > 15)
{
cout << "Password must be between 5 and 15 characters." << endl << endl;
return main();
}
int c = 0;
int y = 0;
int random_character_case;
std::vector<char> values(password_length);
for (int x = password_length; x > 0; x--)
{
if (y == password_length - 2)
{
random_character_case = 1;
}
if (c == 2)
{
std::uniform_int_distribution<int> character_ascii_distr(2, 3);
random_character_case = character_ascii_distr(gen);
}
else
{
std::uniform_int_distribution<int> character_ascii_distr(1, 3);
random_character_case = character_ascii_distr(gen);
}
switch (random_character_case)
{
case 1: {
std::uniform_int_distribution<> numbers_ascii_distr(48, 57);
char asciiValue = numbers_ascii_distr(gen);
values.push_back(asciiValue);
c++;
break;
}
case 2: {
std::uniform_int_distribution<> capital_ascii_distr(65, 90);
char asciiValue = capital_ascii_distr(gen);
values.push_back(asciiValue);
y++;
break;
}
case 3: {
std::uniform_int_distribution<> lowercase_ascii_distr(97, 122);
char asciiValue = lowercase_ascii_distr(gen);
values.push_back(asciiValue);
y++;
break;
}
}
}
cout << values;
values.clear();
cout << endl << endl;
}
}
尝试编写代码以用户输入的长度生成一组随机字符,其中混合了随机的小写和大写字符,以及在集合中随机位置的两个随机数字。
我想强调一下我很新;因此我也很期待看到更有效的方法去做我想做的事情,如果有的话。
在这一行
cout << values;
您正在尝试为 char
的向量调用 std::basic_ostream::operator<<
(即 std::vector<char> values
)。这没有定义,因此编译器不知道它。因此,错误。
您需要遍历 char
个向量的元素(即 values
)。例如,使用基于范围的 for 循环:
for (const char ele : values)
std::cout << ele << " ";
也就是说,您可以简单地使用标准中提供的 std::string
instead of std::vector<char>
for which you have already operator<<
。