C++ clang/llvm编译器中出现重复符号错误
当我今晚在一个项目上工作的时候,我在一个链接器错误中挣扎了一段时间,该错误抱怨“重复符号” 我最终发现我定义了一个helper函数,而不是仅仅在头文件中声明,这就是问题的根源(花了一个多小时才发现) 为什么我可以像这样在我的头中定义内联函数C++ clang/llvm编译器中出现重复符号错误,c++,C++,当我今晚在一个项目上工作的时候,我在一个链接器错误中挣扎了一段时间,该错误抱怨“重复符号” 我最终发现我定义了一个helper函数,而不是仅仅在头文件中声明,这就是问题的根源(花了一个多小时才发现) 为什么我可以像这样在我的头中定义内联函数 int get_val const {return r;} 但类外的同一定义会引发链接器错误?类内的成员函数定义会隐式标记为内联,而非成员函数定义则不会,因此,如果定义位于头文件中,则当多个翻译单元包含头文件时,您会立即中断(ODR)内联提供了一种绕过此问
int get_val const {return r;}
但类外的同一定义会引发链接器错误?类内的成员函数定义会隐式标记为
内联,而非成员函数定义则不会,因此,如果定义位于头文件中,则当多个翻译单元包含头文件时,您会立即中断(ODR)<代码>内联
提供了一种绕过此问题的方法
因此,您需要将非成员函数显式标记为inline
:
inline int foo() {return 42;}
或者,只在标题中声明它,并在.cpp
文件中定义它
请参阅。如果需要内联函数,应在头文件中定义它。您可以看到C++入门(第四版),它有一些关于内联函数的页面。我想你可以在那里得到答案。我们不是都花了无数个小时追逐鬼魂吗。。。