我正在使用@Martin提出的csv parsing with C++解决方案,因为我正在努力避免使用像boost这样的库来解决我当前的项目。我已将他的实现放在“csv.h”标题中,并尝试将其包含在其他一些文件中。我一直收到以下错误
multiple definition of operator>>(std::basic_istream<char, std::char_traits<char> >&, CSVRow&)
当我尝试构建项目时 - 我假设发生了这种情况,因为operator>>
的重新定义与原始版本冲突。我怎么能让这两个玩得好听?感谢。
答案 0 :(得分:8)
有可能你有多个编译单元(即cpp文件)中包含相同的运算符,所以你得到的代码生成相同,链接器比查看所有.obj文件将它们拉到一起并看到倍数。
您有3个选择:
答案 1 :(得分:4)
我已将他的实现放在“csv.h”标题
中
这就是问题所在。请将其放在csv.cpp
文件中。 : - )
答案 2 :(得分:2)
将其标记为内联。
inline istream & operator>>( istream & is, CSVRow & row ) {
// stuff
}
答案 3 :(得分:0)
更好的是,您可以将代码与库代码分开,您可以在项目中创建一个包含C ++文件和标题的文件夹。然后,您可以在Makefile / Makefile.am / CMakeLists中创建一个静态存档(.a
),您可以在完成后链接到主程序。
这种方式更清晰,代码是独立的,并且可重用的组件并不真正依赖于任何其他东西(如果您选择遵循此模式,那么文件夹层次结构可能是有用的一件事。)< / p>