Сейчас компилирую код. Есть несколько файлов, в одном их них определена структура
struct CDirItem
{
UInt64 Size;
FILETIME CTime;
FILETIME ATime;
FILETIME MTime;
UString Name;
UInt32 Attrib;
int PhyParent;
int LogParent;
CDirItem(): PhyParent(-1), LogParent(-1) {}
bool IsDir() const { return (Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0 ; }
};
Объявление через h файл используют несколько cpp.
В основном файле тоже объявлена эта струкрута
struct CDirItem
{
UInt64 Size1;
UInt64 Size;
FILETIME CTime;
FILETIME ATime;
FILETIME MTime;
UString Name;
UString FullPath;
UInt32 Attrib;
bool isDir() const { return (Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0 ; }
};
в другой форме. Этот файл не использует h файл в котором объявлен первый вариант.
Я использую структуру так
CDirItem di;
При выполнении программа падает. Под отладкой вижу, что вызывается конструктор первой структуры, т.е не той что нужно. Ситуация исправляется сменой имени CDirItem на CDirItem2 в основном файле, но хочется понять почему генерируется код не для локальной структуры, а для объявленной в другом *.cpp файле. Я сделал небольшой тестовый проект с аналогичной ситуацией и на нем компилятор использует структуру, объявленную в том же самом *.cpp файле, а не в другом...