Visual Studio — ошибка C ++: идентификатор IntilliSense & quot; отслеживать & quot; не определено — & quot; потенциально неинициализированная переменная локального указателя ‘track’ & quot;

Я пытаюсь собрать библиотеку cvblob, используя OpenCV, и во время компиляции в VS 2013,

    error C4703: potentially uninitialized local pointer variable 'track' used
error C4703: potentially uninitialized local pointer variable 'blob' used

Я не уверен, почему это так, поскольку переменные указателя определены блоком выше (хотя и в отдельном цикле). Вот код:

  // Update track
//cout << "Matching: track=" << track->id << ", blob=" << blob->label << endl;
track->label = blob->label; // ERROR HERE
track->centroid = blob->centroid;

Я использую предварительно написанный заголовок и исходные файлы, поэтому я не уверен, в чем проблема. Кто-нибудь знает, что это за исправление?

До //Update Track, Здесь ссылки ‘track’ и ‘blob’ указаны выше, без ошибок:

  // Select track
CvTrack *track;
unsigned int area = 0;
for (list<CvTrack*>::const_iterator it=tt.begin(); it!=tt.end(); ++it)
{
CvTrack *t = *it;

unsigned int a = (t->maxx-t->minx)*(t->maxy-t->miny);
if (a>area)
{
area = a;
track = t;
}
}

// Select blob
CvBlob *blob;
area = 0;

-1

Решение

Вы должны избегать объявления указателей, не давая им значения. Следовательно, вы должны заменить декларацию на

CvTrack *track=NULL; (if you use C++ without the latest version) or
CvTrack *track=nullptr; (with C++11)

При этом вы уверены, что всегда будете указывать значение указателю (даже если он равен NULL). Затем вы должны проверить перед назначением чего-либо, если указатель равен NULL, чтобы избежать ошибки во время выполнения.

1

Другие решения

Если tt список пуст, или если он не содержит элемент с требуемой областью, то track никогда не будет инициализирован. Это то, на что жалуется компилятор.

Функция, вероятно, должна пытаться обновить стойку, только если она действительно была найдена в списке дорожек.

Ситуация для blob вероятно похоже.

1

По вопросам рекламы [email protected]