Slavka_online
@Slavka_online
Интересная личность

Изменить объект в std::vevtor на другой тип

В чем суть, есть вектор указателей на базовый класс std::vector Mas;
вот так он заполняется

void __fastcall TForm2::Button1Click(TObject *Sender)
{
	String name=Edit2->Text;

if (RadioGroup2->ItemIndex==0) {
	CPointIndic *tmp =new CPointIndic;
	tmp->setName(name);

	Mas.push_back(tmp);
	Form1->updateList(Form1->List);
}

if (RadioGroup2->ItemIndex==1) {
	CMenuIndic *tmp =new CMenuIndic;
	tmp->setName(name);

	Mas.push_back(tmp);
	Form1->updateList(Form1->List);
}

if (RadioGroup2->ItemIndex==2) {
	CCircleIndic *tmp =new CCircleIndic;
	tmp->setName(name);

	Mas.push_back(tmp);
	Form1->updateList(Form1->List);
}


Close();
}


теперь нужно, изменять типы объектов

вот так я его меняю, но он не хочет компилироваться, помогите разобраться с этим механизмом

int index = List->ItemIndex;

if (index>=0) {

	String name = Mas[index]->getName();
	int n = StrToInt(InputBox("","",""));

	switch(n)
	{
		case 1 :
		delete Mas[index];
		CPointIndic *tmp = new CPointIndic;
		Mas.insert(index+1,tmp);
		break;
	}


}

}
  • Вопрос задан
  • 2470 просмотров
Пригласить эксперта
Ответы на вопрос 2
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Insert, например, не умеет вставлять по номеру позиции.
typedef std::vector<int>::iterator vector_iter;
vector_iter iter = Mas.begin() + (index + 1);
Mas.insert(iter, tmp);
Ответ написан
@XO8964
Всё намного проще

CPointIndic *tmp = Mas[index];
delete tmp;
tmp = new CPointIndic;
Mas[index] = tmp;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы