C++运算符的多重定义>>

sa1*_*125 5 c++ csv parsing include dependency-management

我正在使用@Martin提出的解决方案来使用C++进行csv解析,因为我正在尝试避免使用像boost这样的库来解决我当前的项目.我已将他的实现放在"csv.h"标题中,并尝试将其包含在其他一些文件中.我一直收到以下错误

multiple definition of operator>>(std::basic_istream<char, std::char_traits<char> >&, CSVRow&)

当我尝试构建项目时 - 我假设发生这种情况是因为重新定义了operator>>与原始项目的冲突.我怎么能让这两个玩得好听?谢谢.

gbj*_*anb 8

有可能你有多个编译单元(即cpp文件)中包含相同的运算符,所以你得到相同的代码生成,链接器比查看所有的.obj文件将它们拉到一起并看到倍数.

你有3个选择:

  • 将其标记为静态 - 这将使操作员仅对其所在的文件可见.
  • 将其标记为内联 - 这将删除该函数并在使用点插入代码.
  • 将原型放在标题中,将主体放在自己的cpp文件中.

  • 内联可能会或可能不会做你说的.但它肯定会阻止多个定义错误. (2认同)