我试图在一个更大的项目中使用两个旧的(和不同的)usb库,将它们封装到它们自己的命名空间中,如下所示:
namespace usbA {
#include "/msp430/usb.h"
}
namespace usbB {
#include "/cypress/usb.h"
}
这会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。 这可以在不编辑库代码的情况下解决吗? 根据其他一些海报的答案,这是无法做到的。这引出了什么是名称空间好的问题呢?如果我必须进入并修改库源代码,我也可以使用“usbA_”为每个函数添加前缀,而不是使用命名空间。它同样不灵活。
答案 0 :(得分:2)
这会导致链接器错误,因为实际库中的名称不像函数调用那样使用命名空间进行修饰。这可以在不编辑库代码的情况下解决吗?
我敢肯定会有可怕的方法来破解这个,但我真的只是......不是。在我看来,它必将以泪水结束。
如果确实需要两个库,并且它们的名称确实存在冲突,我认为总的来说,你可能最好自己分配它们并自己给它们命名空间。
这引出了什么是名称空间有用的问题?
如果你不使用它们,那么它们是没有用的(而且C代码显然不使用它们)。如果这些库是带有命名空间的C ++项目,那么你就不会遇到这个问题,这很有用。
同样不灵活
嗯,这就是C ++引入名称空间的原因。可悲的是,你不能强迫每个人都写C ++。