如何将list元素转换为字符串?

时间:2015-03-18 19:30:25

标签: c++

我试图在vs 2013中将数据绑定到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>>>)

这是我的代码:

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

我尝试将list元素传递给textblock,但此代码显示

错误C2664:'void Windows :: UI :: Xaml :: Controls :: TextBlock :: Text :: set(Platform :: String ^)':无法将参数1从'std :: string'转换为'Platform :: String ^'

2 个答案:

答案 0 :(得分:3)

  1. 您使用的是错误的变量:en是迭代器。
  2. 您需要取消引用迭代器:*en
  3. 您不小心将其设为wstring
  4. 这是它应该是什么:

    std::string s2(*en);
    

    顺便说一下,列表元素已经是字符串,你不需要转换任何内容。

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

    ENTEXT->Text = en->c_str();
    

答案 1 :(得分:1)

自从你写了

  

&#34;当我尝试将列表项转换为字符串&#34;

时,我遇到了一些问题

而不是具体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);

Example

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

std::cout << *en;

如果您真的需要string->wstring转换(无论出于何种原因未在问题中解释),您可以写一下:

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();

Example

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

//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);

Example