如何解决C++:在类主体之外定义但包含在头文件保护中的成员函数的 ODR 冲突如 YouCompleteMe 插件中所示
我有一个简单的头文件,如下所示。
#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 之外定义的,但该函数是在头部保护 PERSON_H 内定义的。 YouCompleteMe 工具(假设使用 g++),它声明它违反了 ODR。为什么会违反 ODR?这个函数永远不会被定义多次,因为它是由头部保护 PERSON_H 控制的。我不确定 YouCompleteMe 工具中是否存在错误,因为我注意到我在使用 Visual Studio 时没有收到相同的警告消息。
任何帮助都会很棒。
谢谢。
解决方法
它可以包含在多个编译单元中。如果您将定义标记为 function handleFormSubmit(formObject) {
google.script.run.withSuccessHandler(createTable).withFailureHandler(showErrorMessage).processForm(formObject);
document.getElementById("myForm").reset();
}
function showErrorMessage(error) {
alert(error.message);
}
,它应该很高兴。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。