2010-01-22 39 views
2

我发现那个方便的opencv库,并试图使用C编程一个简单的imagemodifier。当我开始编译我的代码时,我得到了一些错误,这有点令人困惑,因为它们没有似乎有道理。这是我第一次使用netbeans进行编程,并且第一次尝试制作比基本计算器等程序更为别致的东西。下面是代码和错误编译器为:用opencv cvLoadImage和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 expression before ‘const’

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

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

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

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

这些错误让我困惑了一下,因为

  1. 指OpenCV的C基准cvLoadImage需要短短两年参数。
  2. 字符常量如何过长?
  3. 'const'之前的期望表达式? hummm ......我没有得到这个在所有
  4. 预期“;”之前‘\ x2e6a7067’,“”或‘)’......还有我不明白这一点无论

    所以有人告诉我我做错了什么?任何帮助将是不错:)

回答

2

在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); 
+0

非常感谢,这对我们有很大的帮助。现在我可以继续测试和编写这个小程序。 – zaplec 2010-01-23 16:54:21

+0

我想我应该在我的屏幕旁边写一个注释“字符串和单个文字的双引号”,因为我之前多次犯过同样的错误,似乎我从中学到了什么:) – zaplec 2010-01-23 17:04:52

0

你应该学习一些C编程语言,拿起一本书或东西...

正确的线路是:

34:图像= cvLoadImage(” test.jpg',iscolor);

43:int result = cvSaveImage('modified.jpg',image);

+1

嗯。你需要双引号,而不是单个。看到我的回复,或者一本书:-)。 – 2010-01-22 21:11:21

+0

我承认,我在编程方面不是很有经验。我研究过几本书,但这些书没有真正帮助,因为我不知道要找什么。 – zaplec 2010-01-23 16:57:24