多个文件需要一个功能吗?

时间:2014-11-18 21:36:43

标签: c++ c organization

假设我有两个文件a.cpp和b.cpp,它们都使用c.hpp中的函数。如果我#include" c.hpp"在a.cpp和b.cpp中我会在链接期间出现错误,说明符号已被定义两次(因为标题保护不会阻止包含在多个翻译单元中)

那么如何让两个.cpp文件都能访问c.hpp中的函数而不会在链接过程中出错?

2 个答案:

答案 0 :(得分:3)

对于一个长函数,你可能希望给它自己的翻译单元功能,将实现移动到它自己的CPP,只保留在标题中的声明。

如果功能很短,您可以添加内嵌关键字:

inline void myfunction() ...

这允许编译器内联每个翻译单元中的函数,避免多重定义。

答案 1 :(得分:1)

在大多数情况下,头文件应该只包含函数的声明,即函数头。函数定义(正文)应包含在单独的.cpp文件中。所以在你的情况下,它应该是这样的:

c.hpp:

int my_function(int x, int y);

c.cpp:

#include "c.hpp"

int my_function(int x, int y)
{
    return x + y;
}

并将#include "c.hpp"添加到您希望使用my_function的任何其他文件中。所有.cpp文件将单独编译,链接器将处理其余文件。