gpt4 book ai didi

混淆错误与 opencv cvLoadImage 和 netbeans

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:51 26 4
gpt4 key购买 nike

我找到了那个方便的 opencv 库,并尝试使用 C 语言用它编写一个简单的图像修改器。当我开始编译我的代码时,我遇到了一些错误,这些错误有点令人困惑,因为它们似乎没有意义。这是我第一次使用 netbeans 进行编程,也是我第一次尝试制作除那些基本计算器等程序以外的东西。以下是编译器给出的代码和错误:

int iscolor = -1; /* Used to load the image as it is*/
IplImage* image = 0;

/* Load Image */
image = cvLoadImage(const char* 'test.jpg', iscolor); /* line 34 */

/*Modify image*/
...

/* Save Image */
int cvSaveImage(const char* 'modified.jpg', const CvArr* image); /* line 43 */

/*End*/

编译错误

main.c: In function ‘main’:

main.c:34: error: expected expressionbefore ‘const’

main.c:34:37: warning: characterconstant too long for its type

main.c:34: error: too few arguments tofunction ‘cvLoadImage’

main.c:43:33: warning: characterconstant too long for its type

main.c:43: error: expected ‘;’, ‘,’ or‘)’ before '\x2e6a7067'

这些错误让我有点困惑,因为

  1. 引用 opencv c 引用 cvLoadImage 只需要两个参数。

  2. 为什么字符常量太长了?

  3. 'const' 之前的预期表达式?嗯……我一点都不明白

  4. 在 '\x2e6a7067' 之前需要 ';'、',' 或 ')'...我也不明白

    那么有人可以告诉我我做错了什么吗?任何帮助都会很好:)

最佳答案

在 C 中,单引号用于表示单个(文字)字符常量,此类常量的结果类型为 int。所以,'a' 可以,'a1' 不行,因为那是两个字符。 C定义了一些转义序列,例如'\n',它被当作一个表示换行符的字符,或者'\xff',它是一个十六进制值的字符0xff。由于 'test.jpg' 包含多个字符,编译器告诉您您的文字字符常量太长。你想要一个需要双引号的字符串。

你需要在一个转换中加上括号:(const char *)x 可以,const char * x 不行(如果你声明x 作为 const char *)。我认为您添加了该强制转换是因为编译器警告您“将 int 转换为指针而无需强制转换”。一般来说,除非您真的知道自己在做什么,否则强制转换以使编译器静音是一个非常糟糕的主意。

基于以上,第34行应该是:

image = cvLoadImage("test.jpg", iscolor);

如果你真的想将 "test.jpg" 转换为 const char *,请执行以下操作:

image = cvLoadImage((const char *)"test.jpg", iscolor);

另外,现在你知道如何修复这一行了:

int cvSaveImage(const char* 'modified.jpg', const CvArr* image);

关于混淆错误与 opencv cvLoadImage 和 netbeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2119417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com