2010-05-27 57 views
1

我希望在当前项目中使用CImg库进行图像处理。我使用的CodeGear C++ Builder的2009年。我包括在源文件中CImg.h,把下面的代码:Codegear 2009中的CImg编译问题

int rows =5; 
int cols = 5; 

CImg<double> img(rows,cols); 

我收到以下错误:

[BCC32 Error] CImg.h(39159): E2285 Could not find a match for 'CImg<unsigned char>::move_to<t>(const CImg<unsigned char>)'

有谁知道是否有a #define我应该在Codegear C++ Builder 2009中编译时使用。或者它不兼容?

回答

2

包含在单个头文件中的40,000行库?这似乎是一个坏主意......

无论如何,不​​幸的是,C++ Builder 2009并不是一个非常好的C++编译器,所以它经常无法处理合法的C++结构。 (C++编译器无法正确处理C++标准的一个方面或另一个方面并不罕见,因为C++是如此复杂的语言。)

当发生这种情况时,您的主要选择是找到另一个库,找到另一个库编译器,等待一个新的,希望更好的C++ Builder版本,或者尝试调整该库以使其工作。

在这种情况下,如果你决定尝试,使图书馆的工作,下面的变化应该让你开始:

  • 对于(CIMG中1.3.4线9145)的move_to`的'模板版本,C++ Builder无法将t检测为'move_to`参数的模板参数。从当前的类型安全版本更改函数声明:
     
        template<typename t> 
        CImg<t>& move_to(CImg<t>& img) { 
    
    更简单的
     
        template<typename t> 
        t& move_to(t& image) { 
    
  • 帮助C++ Builder中找出上线39163的draw_text调用正确的模板参数:与draw_text<unsigned char,unsigned char>(...)更换draw_text(...)

有更多的编译器错误比这两个;您必须同样调整这些CImg源代码。

如果你能够使所有的工作都能正常工作,那么一旦你完成了,你可以看到CImg项目是否有兴趣整合你的改变,将C++ Builder支持添加到他们的正式版本中。

+0

谢谢乔希。但是,我不想深入图书馆。它建立在VS 2005中。所以我只是交叉编译兼容的dll。 – Seth 2010-05-27 22:33:19