假设我有两个文件a.cpp和b.cpp,它们都使用c.hpp中的函数。如果我#include" c.hpp"在a.cpp和b.cpp中我会在链接期间出现错误,说明符号已被定义两次(因为标题保护不会阻止包含在多个翻译单元中)
那么如何让两个.cpp文件都能访问c.hpp中的函数而不会在链接过程中出错?
答案 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文件将单独编译,链接器将处理其余文件。