我刚刚在Visual Studio 2010 (C++)上遇到了一些严重的警告,让我受到了打击。
编译出现了以下输出:
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不扁平化文件层次结构呢?