C++ c++;与旧库的兼容性

C++ c++;与旧库的兼容性,c++,struct,C++,Struct,我有一个图书馆1-1.h #include <1-1.h>; 不幸的是,这个库是三方的,他们在1.2中将结构bucket更改为bucket_t{…}。我所有的代码都使用bucket,但我也希望它与bucket兼容 是否可以: #ifndef bucket typedef bucket_t bucket; #endif (代码不起作用,但我想将bucket设置为bucket to bucket\u t(如果存在)。谢谢。一个选项是在项目或makefile中添加您自己的预定义

我有一个图书馆1-1.h

#include <1-1.h>;
不幸的是,这个库是三方的,他们在1.2中将结构bucket更改为bucket_t{…}。我所有的代码都使用bucket,但我也希望它与bucket兼容

是否可以:

#ifndef bucket
    typedef bucket_t bucket;
#endif

(代码不起作用,但我想将bucket设置为bucket to bucket\u t(如果存在)。谢谢。

一个选项是在项目或makefile中添加您自己的预定义符号,指定您正在使用的版本。类似LIBRARY1\u 1或LIBRARY1\u 2。如果两者都未定义,请报告错误。您可以使用您自己的包含文件,如下图所示。

如果您使用的每个版本的头文件不同

my1-1.h

#if defined( LIBRARY1_1 )
#include <1-1.h>
#elif defined( LIBRARY1_2 )
#include <1-2.h>
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif
#include <1-1.h>
#if defined( LIBRARY1_1 )
#elif defined( LIBRARY1_2 )
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif
#如果已定义(LIBRARY1#u 1)
#包括
#定义的elif(图书馆1_2)
#包括
类型def bucket\u t bucket
#否则
#错误请在包含此文件之前定义LIBRARY1\u 1或LIBRARY1\u 2
#恩迪夫
如果每个版本的标题使用相同的文件名

my1-1.h

#if defined( LIBRARY1_1 )
#include <1-1.h>
#elif defined( LIBRARY1_2 )
#include <1-2.h>
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif
#include <1-1.h>
#if defined( LIBRARY1_1 )
#elif defined( LIBRARY1_2 )
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif
#包括
#如果已定义(库1_1)
#定义的elif(图书馆1_2)
类型def bucket\u t bucket
#否则
#错误请在包含此文件之前定义LIBRARY1\u 1或LIBRARY1\u 2
#恩迪夫

预处理器对该语言几乎一无所知

我会选择下面这样的东西。 可以在包含库的源文件中,也可以编写头文件以避免重复

#if USE_LIBRARY_1_1
#include <1-1.h>
#elif USE_LIBRARY_1_2
#include <1-2.h>
typedef bucket_t bucket
#endif
#如果使用_库_1
#包括
#elif使用图书馆1\u 2
#包括
类型def bucket\u t bucket
#恩迪夫

为什么你不一直使用bucket呢?不是1-1.h,而是1-2.h。我无法控制这个库,但我仍然希望我的代码可以双向运行。如果库1-1定义bucket,那么你的
#ifndef bucket
代码就可以工作:
#define bucket
@Derek如果他只查看他应该能够生成的.h文件,那么他就可以正确了库是否定义了任何类型的版本宏?更容易建立它。例如
#if version_1_2
我得到一个:错误:冲突声明“typedef struct bucket_t bucket”已更新。忘记将include放在#if/#elif块中;)很抱歉出现此错误:聚合“bucket t”的类型不完整,无法定义此示例基于您在问题中提供的信息。您可能需要进行调整,但没有其他信息,我无法提供任何更具体的信息。我用您发布的内容编译了一个最小示例,这是正确的。我的代码有问题,谢谢。