String^ BasicTypes::DimNewVariable(System::String ^RegionName)
{
Random^ Rnd = gcnew Random();
String^ rndType = TypeName->GetValue(Rnd->Next(12))->ToString(); //Тут получаем случайный тип (массив из 12 строк)
String^ rndName = GetRandomChar()->ToLower(); //Получаем имя переменной
while (GetTypeByName(rndName) != "NULL") //вот тут делаем её уникальной
rndName += GetRandomChar()->ToLower();
AddVariable(rndName, rndType, RegionName); //Регистрируем переменную
return "Dim " + rndName + " As " + rndType + "\n";
}
ArrayList в Visual C++
[SIZE="3"][SIZE="2"]
Код:
А вот собственно в чем проблема:
Код:
void BasicTypes::AddVariable(System::String ^name, System::String ^type, System::String ^region)
{
Variables->Add(gcnew BVT(name, type, region)); //Variables вектор
//BVT мой ref класс, в нем 3 поля типа System::String
}
{
Variables->Add(gcnew BVT(name, type, region)); //Variables вектор
//BVT мой ref класс, в нем 3 поля типа System::String
}
Итак, в "Variables" объекты есть, но значения полей у них <неопределенное значение>. Я пробовал делать String::Copy, String::Clone ничего не помогло (или руки кривые)!
А у BVT есть конструктор копирования?
Цитата: Alexander92
А у BVT есть конструктор копирования?
Хм) нет не было, дописал следующее:
Код:
BVT::BVT(BVT ^ copy)
{
this->Name = String::Copy(copy->GetName());
this->Region = String::Copy(copy->GetRegion());
this->Type = String::Copy(copy->GetType());
this->Value = String::Copy(copy->GetValue());
}
{
this->Name = String::Copy(copy->GetName());
this->Region = String::Copy(copy->GetRegion());
this->Type = String::Copy(copy->GetType());
this->Value = String::Copy(copy->GetValue());
}
Думаю это можно назвать конструктором копирования??.. Дело в том, что вызывается обычный конструктор с параметрами... поля инициализируются, но в ArrayList они имеют неопределенное значение... Пробовал то же намутить на C# и там всё это вроде пашет. Но мне надо на С++, не хотелось бы сдаваться)
После того, как дописали, - ничего не поменялось? Просто при добавлении в List вызывается именно конструктор копирования (вспомните даже обычный STL, list :: push_back() и т.п.
Код:
BVT::BVT(String^ varName, String^ varType, String^ varSub, String^ varValue)
{
Name = varName;
Type = varType;
Region = varSub;
Value = varValue;
}
BVT::BVT(String^ varName, String^ varType, String^ varSub)
{
BVT(varName, varType, varSub, "NULL");
}
{
Name = varName;
Type = varType;
Region = varSub;
Value = varValue;
}
BVT::BVT(String^ varName, String^ varType, String^ varSub)
{
BVT(varName, varType, varSub, "NULL");
}
Т.е. вызывался один конструктор вызывался из другого.