Agn*_*ian 8 c++ linker-errors visual-studio-2008 visual-c++-2008 visual-c++
这是我的文件夹结构:
/
|
-- program.cpp
-- utility.h
-- utility.cpp
|
-- module/
|
-- utility.h
-- utility.cpp
// Note that I have two files named utility.h and two named utility.cpp
Run Code Online (Sandbox Code Playgroud)
在构建项目时,我收到一个链接错误(LNK2028:未解析的令牌等等......),说明某些符号未定义.我已经确认所有符号都已定义,并且所有声明的函数都有相应的定义.
我有一种感觉,在编译我的项目时,utility.cpp两个文件夹中的文件都会utility.obj在输出文件夹中编译成相同的文件.结果,一个人覆盖另一个人.
Afr*_*ief 12
右击两者/任.cpp文件> properties> C/C++> Output Files> Object File Name>设置自定义名称.例如,如果两个文件都MyFile.cpp在文件夹中命名A而另一个文件在文件夹中命名B,则可以将输出设置为AMyFile和BMyFile.
或者,您也可以使用宏为对象名称添加前缀父文件夹名称(即使用$(IntDir)\$(SafeParentName)$(SafeInputName)).如果这是不够的(例如,你有A/B/MyFile.cpp和C/B/MyFile.cpp),你不介意有一些目标文件弄乱你的源代码树,你还可以用$(InputDir)\它会把目标文件在同一文件夹作为源文件.
然后将cpp文件编译成两个不同的目标文件.
请享用!
VS2010的更新:在VS2010中有一个更好的解决方案,请在此处查看.感谢n1ck的评论
顺便说一句,如果内容具有相同的名称,您是否使用不同的名称空间将它们分开?
namespace A { // in folder A
class CMyFile {};
};
namespace B{ // in folder B
class CMyFile {};
};
// client.cpp
#include "A/MyFile.h"
#include "B/MyFile.h"
int main() {
A::CMyFile aMyFile;
B::CMyFile bMyFile;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不知道它是否重要,但它对人类来说更明确:D