CImg编译问题在Codegear 2009中

时间:2010-05-27 03:06:35

标签: c++ c++builder cimg

我希望在我当前的项目中使用CImg库进行图像处理。我正在使用Codegear C ++ Builder 2009.我在源文件中包含CImg.h并输入以下代码:

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>)'

有没有人知道在Codegear C ++ Builder 2009中构建时是否应该使用#define。或者它只是不兼容?

1 个答案:

答案 0 :(得分:2)

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

无论如何,遗憾的是,C ++ Builder 2009并不是一个非常好的C ++编译器,因此它通常无法处理其他合法的C ++构造。 (C ++编译器无法正确处理C ++标准的某个方面或其他方面并不罕见,因为C ++是一种如此复杂的语言。)

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

在这种情况下,如果您决定尝试使库工作,那么您应该开始以下更改:

  • 对于`move_to`的模板版本(CImg 1.3.4中的第9145行),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(...)替换为draw_text<unsigned char,unsigned char>(...)

编译器错误多于这两个错误;您必须同样调整CImg源代码。

如果您能够完成所有工作,那么一旦完成,您就可以看到CImg项目是否有兴趣将您的更改合并到其正式版本中添加C ++ Builder支持。