2016-03-18 3 views
1

Я ниже snippet-Динамического приведения к вектору итератору

std::vector<cMyClass> myCls = GetClassValues(); 
std::vector<cMyClass>::const_iterator imyCls; 
for(imyCls = myCLs.begin(); imyCls != myCls.end(); ++imyCls) 
{ 
    cMyClass *cls = dynamic_cast<cMyClass*>(*imyCls);//C2682 


} 

в системе для контура Я хочу иметь переменный указатель CMyClass, я не могу использовать прямое назначение или статический бросок. SO используя dynamic_cast, но это также не работает.

Какой вариант у меня есть, если я хочу заставить его работать.

ответ

3

Вы можете использовать

cMyClass *cls = &*imyCls; 

*imyCls является ссылкой на объект в vector; &*imyCls - адрес этого.

1

Сначала вы пытаетесь получить указатель со ссылкой, вы должны добавить & перед итератором разыменования следующим образом: &*myCls. Кроме того, поскольку вы используете const_iterator, вы можете получить только указатель const. Либо измените imyCls на не-const-итератор, либо измените приведение в версию указателя const.

cMyClass const *cls = dynamic_cast<cMyClass const*>(&*imyCls); 
Смежные вопросы