Мене щойно побили (досить важко) по голові якесь нетривіальне попередження від Visual Studio 2010 (C ++).
Компіляція дала такий результат:
1 Налагодження \ is.obj: попередження LNK4042: об'єкт вказано більше одного разу; додаткові дані проігноровано
1 Налагодження \ make.obj: попередження LNK4042: об'єкт вказано більше одного разу; додаткові дані проігноровано
1 Налагодження \ view.obj: попередження LNK4042: об'єкт вказано більше одного разу; додатки проігноровано
1 identity.obj: помилка LNK2019: невирішений зовнішній символvoid __cdecl test::identity::view(void)
(? view @ identity @ test @@ YAXXZ), на який посилається функціяvoid __cdecl test::identity::identity(void)
(? identity @ 0test @@ YAXXZ)
1 identity.obj: помилка LNK2019: невирішений зовнішній символvoid __cdecl test::identity::make(void)
(? make @ identity @ test @@ YAXXZ), на який посилається функціяvoid __cdecl test::identity::identity(void)
(? identity @ 0test @@ YAXXZ)
1 range.obj: помилка LNK2019: невирішений зовнішній символvoid __cdecl test::range::is(void)
(? is @ range @ test @@ YAXXZ) посилається на функціюvoid __cdecl test::range::range(void)
(? range @ 0test @@ YAXXZ)
Помилки Linker - це завжди біль для налагодження ... але були невирішені посилання, і тому я перевірив ... але джерело добре сформовано ... і нарешті це мене вразило:
Моя ієрархія папок виглядає так:
src/
identity/
is.cpp
make.cpp
view.cpp
range/
is.cpp
make.cpp
view.cpp
так само як ієрархія у Рішенні (я завжди налаштовую її так, щоб вона імітувала "справжню" структуру папок).
І діагностичні результати:
Debug\is.obj
Debug\make.obj
Debug\view.obj
Разом із попередженням, яке говорить про те, що файл .obj
передано два рази лінкеру, а той буде проігнорований.
Більше не шукати: Visual акуратно згладив мою ієрархію папок, а тому не може акуратно скомпілювати джерело.
На даний момент я просто думаю перейменувати файли, які повинні висвітлити проблему ...
... але чи є спосіб, як Visual Studio НЕ вирівняти ієрархію файлів?