我希望在我的当前项目中使用CImg库进行图像处理。我正在使用Codegear C++ Builder2009。我在源文件中包括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。还是不兼容?

最佳答案

一个头文件中包含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
    CImg &move_to(CImg &img){

    更简单
    template
    t&move_to(t&图片){

  • 帮助C++ Builder找出第39163行的draw_text调用的正确模板参数:用draw_text(...)替换draw_text<unsigned char,unsigned char>(...)

  • 除了这两个错误以外,还有更多的编译器错误。您必须同样地为这些调整CImg源代码。

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

    关于c++ - CImg在Codegear 2009中编译问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2918225/

    10-13 02:26