Сначала я загружаю пару векторов, которые являются глобальными переменными в одноэлементном классе (Global). Те работают нормально, я добавляю 1200 месяцев как предметы. Когда я читаю первую строку заметки, цикл for внизу создает объект DataLines и добавляется в локальный вектор. Конструктор класса ничего не делает с глобальными векторами. В верхней и нижней части цикла FOR я проверяю размер глобального вектора. Когда я читаю мою первую строку, обе отладки (1 и 2) дают мне размер 1200, что правильно. Когда он выполняет цикл во второй раз, и я имею в виду в самом верху, отладка показывает мне размер 0. Я попытался переставить строки, которые я прочитал из заметки, но, несмотря ни на что, он переходит к 0 после первойline.
РЕДАКТИРОВАТЬ: После дальнейшего тестирования я обнаружил, что это не цикл, я продублировал код для каждой итерации цикла, и это все еще проблема. Я обнаружил, что выполнение конструктора DataLine является своего рода виновником. Если я прокомментирую, что вектор не изменяет размер, но я поместил возвращение в качестве первой строки конструктора, и это все еще вызывает проблему.
Что могло бы произойти, если не выполняется код, включающий этиглобальные векторы? Надеюсь, это имеет смысл, это моя первая публикация ...
РЕДАКТИРОВАТЬ2: Разобрался с проблемой, ошибка пользователя, конечно. Я сузил проблему до одной из областей действия и решил, что объект DataLine выходит из области видимости, но я не мог понять, почему это является проблемой. Затем я обнаружил, что деструктор для DataLine выгружает векторы ... мой код, моя ошибка.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear(); //debug
string bsTemp1;
string bsTemp2;
vector<DataLine> vLines; // Temp array
for(int i=0; i<1200; i++) // Load array with month numbers
Global::vMonths.push_back(i+1);
Global::mdBase_Date.SetDate(Edit1->Text.c_str() );
MyDate mdTemp=Global::mdBase_Date;
for(int i=0; i<1200; i++)
Global::vDates.push_back(mdTemp) ;
for(int i=1; i<1200; i++)
Global::vDates[i].AddMonths(i);
int h=Global::vDates.size(); // debug line
for(int i=0;i<Memo2->Lines->Count;i++)
{
h=Global::vDates.size(); // <- debug 1
bsTemp1=Memo2->Lines->Strings[i].c_str();
bsTemp2=Memo3->Lines->Strings[i].c_str();
DataLine aLine(bsTemp2, bsTemp1);
vLines.push_back(aLine);
h=Global::vDates.size(); // <- debug 2
}
}