簡體   English   中英

C++:在 class 主體之外定義但包含在 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() function 是在結構體 Person 之外定義的,這個 function 是在 header 保護內部定義的。 YouCompleteMe 工具(假設使用 g++),它聲明它違反了 ODR。 為什么會違反 ODR? 這個 function 永遠不會被多次定義,因為它由 header 保護 PERSON_H 控制。 我不確定 YouCompleteMe 工具中是否存在錯誤,因為我注意到使用 Visual Studio 時沒有收到相同的警告消息。

任何幫助都會很棒。
謝謝。

它可以包含在多個編譯單元中。 如果您將定義標記為inline ,它應該很高興。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM