[英]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.