2010-01-22 71 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