c++ - 如何避免 C++ 中两个库的变量/函数冲突

标签 c++ header-files

我有类似的情况,如下所述:

我有一个头文件first.h 它有一个功能:

char* getName();

和具有函数定义的相关cpp文件first.cpp

char* getName(){return "first";}

和第二个头文件second.h 它具有以下功能:

char* getName();

关联的cpp文件second.cpp有函数定义

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 的评论,这仅在函数内联时有效。如果函数不是内联的并且您确实无法更改头文件,则可以为这些函数创建“包装器”头文件:

文件 wrapper-first.h:

namespace first
{
    char* getName();
}

文件 wrapper-first.cpp:

#include "wrapper-first.h"
#include "first.h"

char* first::getName()
{
    return ::getName();
}

...并为第二个头文件创建相同的文件。然后您只需将 wrpper-include 文件包含在您的 cpp 文件中并使用上面的代码。

关于c++ - 如何避免 C++ 中两个库的变量/函数冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32582933/

相关文章:

C++ 头文件 (.h) 或 C 中的 .h 文件包含滤波器系数

在C中使用自己的头文件调用函数

c++ - 使用 cURL 库时在 C/C++ 中捕获异常

c++ - 我必须从5的数组中找到4个数字的最大和。我的代码对于更大的数字失败

c++ - 重载数组中的new和delete

c++ - 如何从字符串中解析欧元符号?

c - 函数的隐式声明

c++ - 即使已指定,Visual Studio C++ 程序也找不到包含文件夹

c++ - 创建许多头文件,只是#include 许多文件(就像一个集线器文件)

c++ - QWebView设置边框可见