使用 FreeTDS 库时出现冲突声明“typedef int RETCODE”错误

Conflicting declaration ‘typedef int RETCODE’ error when using FreeTDS libraries

我正在使用 FreeTDS 库将 C++ 连接到 MSSQL,但在编译时出现以下错误。

In file included from pa_main.cpp:16:0: /usr/local/include/sybdb.h:120:13: error: conflicting declaration ‘typedef int RETCODE’ typedef int RETCODE;

In file included from /usr/include/sql.h:19:0, from pa_sql_db.h:16, from pa_main.cpp:11: /usr/include/sqltypes.h:268:33: note: previous declaration as ‘typedef short int RETCODE’ typedef signed short RETCODE;

我的理解是 unixodbc 和 freeTDS 库对不同大小的 int 使用相同的定义名称 RETCODE。

我怎样才能避免这种情况?任何人都可以针对此问题提出解决方法吗?

您正在处理两个向后兼容 C 的库。C 没有名称空间,因此它们的 typedef 污染了全局名称空间。我建议将每个库的代码保存在单独的翻译单元中。