我有类似的情况,如下所述:
char* getName();
char* getName(){return "first";}
char* getName();
char* getName(){return "second";}
现在有一个main()函数:
#include "first.h" #include "second.h" int main(){ return 0; }
当我包含那些.h文件时,编译器会在函数getName()中给出错误,因为它是冲突的.
如何在不更改.h文件的情况下摆脱此问题
解决方法
包含这些头文件时可以使用名称空间:
在你的cpp文件中:
namespace first { #include "first.h" } namespace second { #include "second.h" }
然后您可以使用以下功能:
... first::getName(); second::getName(); ...
编辑:感谢Jens的评论,只有函数是内联的才有效.如果函数不是内联的,并且您实际上无法更改头文件,则可以为这些函数创建“包装器”头文件:
文件包装器 – first.h:
namespace first { char* getName(); }
文件wrapper-first.cpp:
#include "wrapper-first.h" #include "first.h" char* first::getName() { return ::getName(); }
…并为第二个头文件创建相同的内容.然后,您只需在您的cpp文件中包含wrpper-include文件,并使用上面的代码.