C++:在 class body 外部定义但包含在 header 守卫内的成员函数的 ODR 违规(如 YouCompleteMe 插件所示)

C++: ODR violation for member functions defined outside of class body but enclosed within header guard (as shown in YouCompleteMe plugin)

我有一个简单的 header 文件,如下所示。

  #ifndef PERSON_H
  #define PERSON_H

  #include <iostream>
  #include <string>
  using namespace std;

  struct Person {
      string name;
      string address;
      auto get_name() const -> string;
  };

 string Person::get_name() const {  // Function 'get_name' defined in a header file; function definitions in header files can lead to ODR violations
          return this -> name;
  }

  #endif

问题:
尽管 Person::get_name() 函数是在 Person 结构之外定义的,但该函数是在 header 守卫 PERSON_H 内部定义的。 YouCompleteMe 工具(假定使用 g++),它声明它违反了 ODR。为什么会违反 ODR?这个函数永远不会被定义超过一次,因为它由 header 守卫 PERSON_H 控制。我不确定 YouCompleteMe 工具中是否存在错误,因为我注意到我没有使用 visual studio.

收到相同的警告消息

任何帮助都会很棒。
谢谢

它可以包含在多个编译单元中。如果标记定义inline应该会很高兴。