C++ 如何将列表元素转换为字符串?
我尝试在VS2013中将数据绑定到textblock 但我在尝试将列表项转换为字符串时遇到了一些问题 这是来自vs的错误消息: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
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);