【问题标题】:Trying to generate a random letter error: cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'char' in assignment尝试生成随机字母错误:无法在赋值中将 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' 转换为 'char'
【发布时间】:2021-12-16 18:36:55
【问题描述】:

我正在尝试打印字符。如何将字符串转换为字符?我收到此错误:

错误:无法在赋值中将 'std::__cxx11::string {aka std::__cxx11::basic_string}' 转换为 'char'

#include <iostream>
#include <random>
#include <string>
#include <ctime>
using namespace std;
int const MAX = 4;

string randomString(int n){// generating random letter

    char alphabet[MAX] = { 'r', 'a', 'n', 'd'};

    string res = "";
    for (int i = 0; i < n; i++)
        res = res + alphabet[rand() % MAX];
 
    return res;
}

int main (){
    srand(time(NULL));
    char random;

    random = randomString(1);// problem lies here
    char a1 = random;

    char a2 = random;

    char a3 = random;
    cout<<a1<< " " << a2 << " " << a3<< endl;
}

【问题讨论】:

  • randomString 返回一个std::stringrandom 是一个char
  • std::__cxx11::string {aka std::__cxx11::basic_string} 仅表示“std::string”。您的错误是“cannot convert 'std::string' to 'char' in assignment”。这是真的。 std::string 没有隐式转换为 char

标签: c++


【解决方案1】:

您似乎认为randomrandomString(1) 的别名,将random 分配给多个变量将多次调用randomString(1)。它不是。这不是变量的工作方式。

您正在调用randomString(1) 一次,然后尝试将其返回值,即std::string(即chars 的集合)分配给单个char。不存在这样的转换,因此出现错误。

试试这个:

int main (){
    srand(time(NULL));
    string a1 = randomString(1);
    string a2 = randomString(1);
    string a3 = randomString(1);
    cout << a1 << " " << a2 << " " << a3 << endl;
}

如果你真的想要单个chars,请使用std::string::operator[]

int main (){
    srand(time(NULL));
    char a1 = randomString(1)[0];
    char a2 = randomString(1)[0];
    char a3 = randomString(1)[0];
    cout << a1 << " " << a2 << " " << a3 << endl;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2018-03-11
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多