1

我希望在我当前的项目中使用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>)'

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

4

1 回答 1

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` 参数的模板参数。从当前的类型安全版本更改函数声明:
        模板<类型名 t>
        CImg<t>& move_to(CImg<t>&img) {
    
    向更简单的
        模板<类型名 t>
        t& move_to(t& 图像) {
    
  • 帮助 C++Builder 为第 39163 行的 draw_text 调用找出正确的模板参数:替换draw_text(...)draw_text<unsigned char,unsigned char>(...).

除了这两个之外,还有更多的编译器错误;您将不得不为这些类似地调整 CImg 源代码。

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

于 2010-05-27T12:29:43.350 回答