首页 >后端开发 >C++ >为什么我的 C 代码会抛出'多重定义”错误?

为什么我的 C 代码会抛出'多重定义”错误?

Linda Hamilton
Linda Hamilton原创
2024-11-20 04:32:02499浏览

Why Does My C   Code Throw a “Multiple Definition” Error?

多重定义错误:定义冲突的解决方案

在 C 中,在头文件中定义函数或类并在源文件中实现它们时,开发人员可能会遇到“多重定义”错误。当多个翻译单元(源文件)包含同一标识符的定义时,就会出现此错误。

多重定义的原因

头文件时出现“多重定义”错误包含定义包含在多个翻译单元中。在以下情况下可能会发生这种情况:

  • 头文件同时包含在源文件及其相应的头文件中。
  • 头文件中提供了定义而不是声明。

理解错误

考虑提供的代码示例:

// complex.h
class Complex
{
public:
   friend std::ostream& operator<<(std::ostream&, const Complex&);
};

// complex.cpp
std::ostream& operator<<(std::ostream&, const Complex&);

在此示例中,运算符

多重定义的解决方案

多重定义错误的解决方案是:

  • 使用“inline”关键字: 通过将函数声明为内联,您可以允许多个翻译单元提供定义而不会引起冲突。但是,内联函数有一些限制,例如对大型函数的性能影响。
  • 将定义移动到源文件:而不是定义运算符

使用 inline 关键字或将定义移至源文件是避免多重定义错误的首选解决方案。

处理 real() 和

在代码示例中,real() 函数在complex.h 中声明,但未定义。这就是编译器不会为其报告多重定义错误的原因。类声明中声明的成员函数是隐式内联的,这意味着它们的定义被插入到包含标头的所有翻译单元中。对于运算符

以上是为什么我的 C 代码会抛出'多重定义”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn