两个头文件重复定义了一个名字,怎么办

时间:2021-01-18 16:48:34
因为用到不同的库的头文件,但这两个文件里定义了相同的名字:
typedef xxxxx Typename;

这个Typename又是很多地方必须用到的。不可能在使用的地方一一加上namespace

请问有什么办法能同时使用这两个 typedef么?

10 个解决方案

#1


定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

#2


引用 1 楼 delphiwcdj 的回复:
定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

就是比如在所有 cout 前加上std::cout
但我已有的代码这种地方太多了,都加不可能。

两个头文件是人家的东西我不能改,请问怎么把这俩重名的定义到不同名字空间?

#3


引用 1 楼 delphiwcdj 的回复:
定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

他意思是 用到的地方很多,全加namespace::Typename麻烦。

建议可以用宏#define Typename namespace::Typename

#4


怕麻烦就别搞编程。

#5


给你的库头文件整个包在namespace里,只要在原有的库实现文件里using一下就可以了。

等你用到自己程序里的时候,选择性的利用namespace暴露这个类型。

#6


没有想到好的办法,关注下

#7


引用 2 楼 prhanxben 的回复:
引用 1 楼 delphiwcdj 的回复:

定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

就是比如在所有 cout 前加上std::cout
但我已有的代码这种地方太多了,都加不可能。

两个头文件是人家的东西我不能改,请问怎么把这俩重名的定义到不同名字空间?

可以利用编译器帮你完成代码替换,VS下Ctrl+f指定你替换的内容和范围

#8


不用typedef,换成预编译,然后用#ifdef判断...

#9


选择局部暴露namespace

#10


引用 5 楼 qq120848369 的回复:
给你的库头文件整个包在namespace里,只要在原有的库实现文件里using一下就可以了。

等你用到自己程序里的时候,选择性的利用namespace暴露这个类型。

头文件和cpp文件我都不能改,请问怎么包在自己的namespace里?

#1


定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

#2


引用 1 楼 delphiwcdj 的回复:
定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

就是比如在所有 cout 前加上std::cout
但我已有的代码这种地方太多了,都加不可能。

两个头文件是人家的东西我不能改,请问怎么把这俩重名的定义到不同名字空间?

#3


引用 1 楼 delphiwcdj 的回复:
定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

他意思是 用到的地方很多,全加namespace::Typename麻烦。

建议可以用宏#define Typename namespace::Typename

#4


怕麻烦就别搞编程。

#5


给你的库头文件整个包在namespace里,只要在原有的库实现文件里using一下就可以了。

等你用到自己程序里的时候,选择性的利用namespace暴露这个类型。

#6


没有想到好的办法,关注下

#7


引用 2 楼 prhanxben 的回复:
引用 1 楼 delphiwcdj 的回复:

定义到不同的命名空间
不可能在使用的地方一一加上namespace,这个怎么讲

就是比如在所有 cout 前加上std::cout
但我已有的代码这种地方太多了,都加不可能。

两个头文件是人家的东西我不能改,请问怎么把这俩重名的定义到不同名字空间?

可以利用编译器帮你完成代码替换,VS下Ctrl+f指定你替换的内容和范围

#8


不用typedef,换成预编译,然后用#ifdef判断...

#9


选择局部暴露namespace

#10


引用 5 楼 qq120848369 的回复:
给你的库头文件整个包在namespace里,只要在原有的库实现文件里using一下就可以了。

等你用到自己程序里的时候,选择性的利用namespace暴露这个类型。

头文件和cpp文件我都不能改,请问怎么包在自己的namespace里?