Я только что был избит (довольно трудно) по голове некоторым нетривиальным предупреждением от Visual Studio 2010 (С++).
В результате компиляции был получен следующий результат:
1 Debug\is.obj: предупреждение LNK4042: объект, указанный более одного раза; дополнительные функции игнорируются
1 Debug\make.obj: предупреждение LNK4042: объект, указанный более одного раза; дополнительные функции игнорируются
1 Debug\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)
Ошибки компоновщика всегда являются болью для отладки... но были нерешенные ссылки, поэтому я проверил... но источник хорошо сформирован... и, наконец, он ударил меня:
Моя иерархия папок выглядит так:
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 НЕ сгладила иерархию файлов?