0

我有一个包含额外A.h头文件的 dll 项目。A.cpp包括 Ah 和具有 o 标头的 B.cpp。如果我添加B.cpp到 Visual C++ 项目编译器报告许多错误:

Error   9   error LNK2005: "wchar_t * __stdcall aaa(int)" (?aaa@@YGPA_WH@Z) already defined in A.obj    C:\P\B.obj  pr1

如果我离开B.cpp项目目录但不将其添加到项目中,则没有问题并且项目编译正常。

那是添加B.cpp文件的问题吗?

4

3 回答 3

1

我认为扩展没有影响,可能是你想要的。如果我错了,请纠正我,但我想我可以将 Bh 重命名为 B.fss ,在源代码中定义它,编译器应该编译

如果你在项目中包含它,你的 b.cpp 将被自动编译;并且由于您也在其他地方包含同一文件的内容,因此将再次编译其中的代码,从而导致重复的定义错误

于 2012-10-08T16:12:38.640 回答
1

基本上,如果您在一个 .cpp 文件中包含具有定义而不是声明的内容并将其添加到项目中,那么您当然会遇到多个定义错误 - 将 B.cpp 中的内容的定义移动到 Bh 并将其包含在 A 中。 cpp。问题不在于文件扩展名,问题在于您需要了解同一事物的多个定义会导致此类错误。

于 2012-10-10T08:15:55.947 回答
0

#include用于头文件,而不是其他 .cpp 文件。

#include "B.cpp"从 A.cpp 中删除,事情将开始正常运行。

如果您打算包含它,或者将 B.cpp 重命名为 Bh。

于 2012-10-08T15:34:41.813 回答