在多个 cpp-files 中包含带有定义的 h-file

Include h-file with definitions inside in multiple cpp-files

我的问题是我有 header-file(自定义 unit-test 框架),其中包含函数定义。例如:
unit_test.h:

#pragma once
...    
void Assert(bool b, const string& hint = {})
{
    AssertEqual(b, true, hint);
}
...

将一些函数定义在 header 中对我来说很方便,因为我经常通过简单地包含来使用这个函数(unit_test.h 位于单独的目录 C:/Dev/include 中)。
但是如果我处理的项目中有多个 cpp 文件使用此功能,我会按预期收到多重定义错误。
简单项目如下所示:

main.cpp:

#include "unit_test.h"

void foo();

int main()
{
    Assert(1);
    foo();
    return 0;
}

foo.cpp:

#include "unit_test.h"

void foo()
{
    Assert(2);
}

所以我想知道是否有正确的方法将函数定义保存在 header 文件中并在项目中使用它而不会出现多重定义错误?
(还是把函数定义移到源码里,每次单独编译,还是把unit_test编译成静态库更好?)

实现它的最简单方法是在函数定义中添加 inline 关键字,但这不是最佳解决方案。

最好的选择是将定义移动到源文件,但只有它不是模板。

我会使用带内联的匿名命名空间:

namespace {
    inline void Assert(bool b, const string& hint = {})
    {
        AssertEqual(b, true, hint);
    }
}

这个错误是因为每当你包含文件时它会再次定义函数。解决方案是制作一个仅包含声明的 header 文件 unit_test.h 并创建一个源文件 unit_test.cpp定义。现在您可以包含 header 文件,它不会出错。不要忘记在 header 中添加 #ifndef,如下所示

unit_test.h

#ifndef UNIT_TEST_H_
#define UNIT_TEST_H_
// Declare you function
// and end with:
#endif