2015-03-18 2 views
3

У меня есть попытка привязать данные к textblock в vs 2013.Как преобразовать элемент списка в строку?

Но у меня возникли проблемы, когда я пытаюсь преобразовать элемент списка в строку.

это сообщение об ошибке от против:

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 

Я стараюсь передать список элемент TextBlock, но этот код показывает

ошибку C2664: 'void Windows :: UI :: Xaml :: Controls :: TextBlock :: Text :: set (Platform :: String ^)': не может преобразовать аргумент 1 из 'std :: string' в 'Platform :: String^'

+0

Просьба предоставить образец рабочего кода или, по крайней мере, больше информации. Например, что такое 'cn'? –

+0

Ошибка выглядит довольно ясно. Вы не можете сделать строку из одного итератора списка. Переход 'c1.begin()' не должен компилироваться. – chris

+1

std :: wstring бесполезно, избегайте этого –

ответ

3
  1. Вы используете неправильную переменную: en - итератор.
  2. Вы должны разыменованием Итератор: *en
  3. Вы случайно сделали это wstring.

Вот что должно быть:

std::string s2(*en); 

Btw элементы списка уже строки, вам не нужно конвертировать ничего.

Чтобы преобразовать std::string в Platform::String, вам нужно использовать функцию c_str члена:

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

На самом деле я пытаюсь передать элемент списка в textblock –

+0

@YelowSea проверить мое редактирование. – emlai

1

Так как вы написали

«Я получил некоторые проблемы, когда я пытаюсь преобразовать элемент списка к строке "

, а не конкретно 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

Смежные вопросы