C++ 如何将列表元素转换为字符串?

C++ 如何将列表元素转换为字符串?,c++,C++,我尝试在VS2013中将数据绑定到textblock 但我在尝试将列表项转换为字符串时遇到了一些问题 这是来自vs的错误消息: no instance of constructor "std::basic_string<_Elem, _Traits, _Alloc>::basic_string [with _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t&g

我尝试在VS2013中将数据绑定到textblock

但我在尝试将列表项转换为字符串时遇到了一些问题

这是来自vs的错误消息:

no instance of constructor "std::basic_string<_Elem, _Traits,
_Alloc>::basic_string [with _Elem=wchar_t,
_Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t>]"
matches the argument list argument types are:
(std::_List_iterator<std::_List_val<std::_List_simple_types<std::string>>>)
没有构造函数“std::basic_string::basic_string[带_Elem=wchar\t,
_Traits=std::char\u Traits,\u Alloc=std::allocator]“
与参数列表匹配的参数类型有:
(标准:列表迭代器)
这是我的代码:

list <string> c1;

//Insert Data
c1.push_back("one");
c1.push_back("two");
c1.push_back("three");
c1.push_back("Four");
c1.push_back("Five");
c1.push_back("Six");
c1.push_back("Seven");
c1.push_back("Eight");
c1.push_back("Nine");
c1.push_back("Ten");




//Random data from list

int RandNum = 0 + (std::rand() % 10);

auto en = c1.begin();
advance(c1.begin(), RandNum);

std::wstring s1(*en);

std::string s2(*en);

ENTEXT->Text = s2; //ENTEXT is textblock name
列表c1;
//插入数据
c1.推回(“一”);
c1.推回(“两”);
c1.推回(“三”);
c1.推回(“四”);
c1.向后推(“五”);
c1.推回(“六”);
c1.推回(“七”);
c1.推回(“八”);
c1.向后推(“九”);
c1.向后推(“十”);
//列表中的随机数据
int RandNum=0+(标准::兰德()%10);
auto en=c1.begin();
advance(c1.begin(),RandNum);
标准::wstring s1(*en);
标准:字符串s2(*en);
ENTEXT->Text=s2//ENTEXT是textblock名称
我试图将list元素传递给textblock,但下面的代码显示

错误C2664:“无效Windows::UI::Xaml::Controls::TextBlock::Text::set(平台::字符串^)”无法将参数1从“std::String”转换为“平台::字符串^”

  • 您使用了错误的变量:
    en
    是迭代器
  • 您需要取消对迭代器的引用:
    *en
  • 你不小心把它变成了一个
    wstring
  • 以下是它应该是什么:

    std::string s2(*en);
    
    顺便说一句,列表元素已经是字符串,您不需要转换任何内容

    要将
    std::string
    转换为
    Platform::string
    ,需要使用
    c_str
    成员函数:

    ENTEXT->Text = en->c_str();
    
    自从你写了

    “尝试将列表项转换为字符串时遇到问题”

    不是特别地
    wstring
    ,我想您是想取消对正确迭代器的引用,并将
    s2
    作为正常的
    std::string
    副本

    int RandNum = 0 + (std::rand() % 10);
    
    auto en = c1.begin();
    std::advance(en, RandNum); // Make sure to advance the right iterator
    
    std::string s2(*en);
    

    请注意,上面将创建迭代器指向的列表元素的副本,但是,它已经是
    std::string
    (不需要转换)。您可以只使用取消引用的迭代器:

    std::cout << *en;
    

    或者,C++11解决方案(请注意
    -stdlib=libc++
    支持):

    //列表中的随机数据
    int RandNum=0+(标准::兰德()%10);
    auto en=c1.begin();
    预付款(en,RandNum);
    typedef std::codevt_utf8 convert_type;
    std::wstring_转换器;
    std::wstring converted_str=转换器。来自_字节(*en);
    

    请提供工作代码示例或至少更多信息。例如,什么是
    cn
    ?错误看起来很清楚。不能从单个列表迭代器生成字符串。前进
    c1.begin()
    不应该编译。std::wstring是无用的,避免它。我想你实际上需要一个向量。嗨,我已经更新了我的代码。谢谢。实际上我正在尝试将列表元素传递给textblock
    int RandNum = 0 + (std::rand() % 10);
    
    auto en = c1.begin();
    std::advance(en, RandNum); // ditto
    
    std::wstringstream ws;
    ws << en->c_str();
    std::wstring s2 = ws.str();
    
    //Random data from list
    
    int RandNum = 0 + (std::rand() % 10);
    
    auto en = c1.begin();
    advance(en, RandNum);
    
    typedef std::codecvt_utf8<wchar_t> convert_type;
    std::wstring_convert<convert_type, wchar_t> converter;
    std::wstring converted_str = converter.from_bytes(*en);