Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ clang/llvm编译器中出现重复符号错误_C++ - Fatal编程技术网

C++ clang/llvm编译器中出现重复符号错误

C++ clang/llvm编译器中出现重复符号错误,c++,C++,当我今晚在一个项目上工作的时候,我在一个链接器错误中挣扎了一段时间,该错误抱怨“重复符号” 我最终发现我定义了一个helper函数,而不是仅仅在头文件中声明,这就是问题的根源(花了一个多小时才发现) 为什么我可以像这样在我的头中定义内联函数 int get_val const {return r;} 但类外的同一定义会引发链接器错误?类内的成员函数定义会隐式标记为内联,而非成员函数定义则不会,因此,如果定义位于头文件中,则当多个翻译单元包含头文件时,您会立即中断(ODR)内联提供了一种绕过此问

当我今晚在一个项目上工作的时候,我在一个链接器错误中挣扎了一段时间,该错误抱怨“重复符号”

我最终发现我定义了一个helper函数,而不是仅仅在头文件中声明,这就是问题的根源(花了一个多小时才发现)

为什么我可以像这样在我的头中定义内联函数

int get_val const {return r;}

但类外的同一定义会引发链接器错误?

类内的成员函数定义会隐式标记为
内联,而非成员函数定义则不会,因此,如果定义位于头文件中,则当多个翻译单元包含头文件时,您会立即中断(ODR)<代码>内联
提供了一种绕过此问题的方法

因此,您需要将非成员函数显式标记为
inline

inline int foo() {return 42;}
或者,只在标题中声明它,并在
.cpp
文件中定义它


请参阅。

如果需要内联函数,应在头文件中定义它。您可以看到C++入门(第四版),它有一些关于内联函数的页面。我想你可以在那里得到答案。

我们不是都花了无数个小时追逐鬼魂吗。。。