两个开源库中的宏名和类名的定义冲突的问题?

梁全 发布于 2012/09/23 14:59
阅读 757
收藏 0
 

@FangQi 你好,想跟你请教个问题:

 

过去我的提问:

我现在希望同时使用两套开源的图形学方面的软件包,他们是openCASCADE和CGAL。

但我在使用中发现下面的问题:

openCASCADE定义了下面的宏

# define   Handle(ClassName)  Handle_##ClassName

-----------------------------------

可是在CGAL中却定义了一个同名的类(注意构造函数)
class Handle
{
  public:
    Handle()
 : PTR(static_cast<Rep*>(0)) {}

....

  protected:
    Rep* PTR;
};

这导致如果同时使用这两个开源的软件包,编译时会发生错误:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

...

-----------------------------------------

请问有解决办法么?谢谢各位朋友!C++我只是掌握了皮毛

 
您的回答:

只要不出现在同一个源文件中就可以,所以可以加一个包装

 

能说的再详细点么?谢谢!!!

加载中
0
cut
cut

最简单快捷的方式,将两份代码都编译程库,动态调用,不包含任何头文件,想用的东西才将头文件相关的定义考过来用,这样的话define出来的东西并不会产生冲突,或者更懒点的话可以直接通过动态库生存对象的方法获取对象指针,里面怎么搞随你便。

0
梁全

谢谢,我已解决问题,用的#undef

#ifdef Handle  // undef Handle
#undef Handle
#include <vector>

#include <boost/shared_ptr.hpp>
#include <cgal/Exact_predicates_inexact_constructions_kernel.h>
#include <cgal/Polygon_2.h>
#include <cgal/create_offset_polygons_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;

typedef K::Point_2      Point;
typedef CGAL::Polygon_2<K>    Polygon2; // cannot use "Polygon", conflict with VC6.0's function "Polygon"
typedef CGAL::Straight_skeleton_2<K> Ss;

typedef boost::shared_ptr<Polygon2>  PolygonPtr;
typedef boost::shared_ptr<Ss>   SsPtr;

typedef std::vector<PolygonPtr>   PolygonPtrVector;
#endif

返回顶部
顶部