C++ C++;类名冲突
我现在正在做一个需要整合两个子项目的项目C++ C++;类名冲突,c++,c,class,stl,C++,C,Class,Stl,我现在正在做一个需要整合两个子项目的项目 项目A是用C++编写的,项目B是用C编写的。一个问题是,在项目B中,有一个结构,名为矢量>代码>,作者在项目A中使用了 STD::vector < /COD> STL。因为项目B以后可能会更新,所以我不想更改B的向量类的名称 有没有办法处理这样的情况? < P>这就是你为什么有C++的原因!建议将自己的vector类封装在自己的命名空间中。它们已经分别是不同的名称,vector和std::vector。你不必改变任何东西。 < P>如果你合并了2个这样
项目A是用C++编写的,项目B是用C编写的。一个问题是,在项目B中,有一个结构,名为
有没有办法处理这样的情况? < P>这就是你为什么有C++的原因!建议将自己的
vector
类封装在自己的命名空间中。它们已经分别是不同的名称,vector
和std::vector
。你不必改变任何东西。 < P>如果你合并了2个这样的项目,你当然是C++编程……/P>
您可以将C向量包装在命名空间中。。。每当需要使用C向量时,就将其类型称为C_NAMESPACE::vector。(不要同时导入两个名称空间!)
试试看它是否有效 在我看来,有两个非常简单的解决方案
代码>并将标准库的向量称为std::vector
,将C向量称为vector
或::vector
std
的内容污染项目的名称空间),请将标准库的向量称为vector
或std::vector
,将C向量称为::vector
x
都可以称为::x
,它始终不同于在名称空间内部声明的任何标识符x
在这种情况下,我倾向于避免在任何地方编写
vector
,以避免混淆。我总是将标准库的向量称为std::vector
,将C向量称为::vector
。如果你这样做了,即使你是使用namespace std也没有关系代码>或否。谢谢。但我也想问一下,如果在项目A中,我们使用名称空间std编写然后简单地使用vector
而不是std::vector
。在这种情况下会有编译错误吗?是的,但ADL可能很容易反驳你。@Chitanda从不使用命名空间std编写
@Chitanda,您可能正在寻找的答案是类型别名(在C++11中使用…=…
,或者如果需要,只使用一个普通的typedef
,以及全局名称空间::vector
和std::vector
),但真正的答案是,请仔细想想您编写的这些乱七八糟的东西有多必要。您真的需要一个结构来拥有一个众所周知的C++标准类的名称,并且您真的需要每次导入整个代码> STD< /COD>命名空间吗?@是的,包含命名空间总是好的。然而,省略它们有时确实会使代码更清晰、更容易理解。在C项目中如何拥有一个“名为vector
”的类?C中没有类。@拟人抱歉,我弄错了。它应该是一个结构。我已经修改了,还有一条评论。目前,我试图将c
项目(项目B)编译成一个库,并调用项目a中的函数。请注意,c中没有名称空间,但c中也没有类,这使得OP的问题非常混乱。因此c_NAMESPACE::vector
只是文本本身,对吗?或者C_NAMESPACE
指的是其他东西?它没有任何意义,只是一个随机标识符。。。用“namespace MyNameSpace{”…C code….“}”包装您的C代码,并将C向量称为MyNameSpace::vector。(或::vector)甚至更好,namespace ProjectB{extern“C{#include}}