Изменение размера вектора STL до 0 - PullRequest
0 голосов
/ 02 октября 2019

Сначала я загружаю пару векторов, которые являются глобальными переменными в одноэлементном классе (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
       }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...