2011-08-30 54 views
2

我試圖建立所謂lipiTk「strcasecmp」在此範圍內未聲明

我有很多錯誤,像這樣的代碼:

Documents/lipi/lipi/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.cpp:1222:78: 
error: ‘strcasecmp’ was not declared in this scope 

我應該怎麼做,有太多代碼中的cpp文件給出了類似的錯誤。 我不認爲我可以測試寫入包括string.h到每個cpp文件給出錯誤,可能問題是關於我的編譯器?

我在Ubuntu和GCC是4.5。

我SW配置上比lipitk需要如我在手動讀取。

+1

你試過構建一個小程序,只是包含此功能,以確保您的編譯器配置是否正確? –

+0

聽起來像'命名空間'問題。 –

+0

您不必在*每個*文件上測試。只需測試編譯器抱怨的第一個文件即可。如果該文件錯誤消失,則修復其他文件。否則,請嘗試其他方法(例如檢查文檔,該文檔*會告訴您該函數在哪裏聲明)。 –

回答

0

您需要包含文件中的函數是在範圍可供 - 如何在世界上弄來這麼多的代碼,而無需在了正確的夾雜物(我假設它的很多,如果你不能把那在每個文件中一次)。

PS:你確定你的Ubuntu版本在string.h中可用的功能?鍵入:

man strcasecmp 

進入bash終端,看看它是否存在以及如何訪問它。這可能會幫助你找到它至少在假設你的代碼是正確的,並且包括剛從移植或類似的東西。

+0

在Ubuntu w/GCC 4.5'man 3 strcasecmp |頭-9 |尾巴-1'說'#包括'。(請注意''',但我不知道如果這只是OP中的拼寫錯誤) – user786653

+0

是的,當我搜索到它時,我也想出了strings.h(我沒有用Ubuntu來檢查它自己)。所以,我想他可能也是這種情況。如果他添加它,也許它會有所幫助:) –

+0

我意識到:) FWIW'string.h'確實在(我的)Ubuntu上定義了'strcasecmp',但只有當'-std = c99'不是活動的或'__USE_BSD'被定義爲。 – user786653

8

我會猜這裏。 「strcasecmp」不是一個標準的庫函數,但是,它的名字遵循庫函數的約定,所以我認爲lipiTk最初是使用一些編譯器編寫的,該編譯器爲它的運行時庫添加了一堆非標準擴展他們在標準頭文件中)

所以,我猜想問題是你的編譯器有一組不同的庫擴展名 - 或者可能類似的名稱不同 - 谷歌告訴我,「strcasecmp」的確一個不區分大小寫的字符串比較,許多編譯器稱之爲「stricmp」或「strcmpi」或「_stricmp」。找出哪些名字你編譯器使用,然後在源文件的頂部添加的#define:

#define strcasecmp _stricmp 
+1

Right,[strcasecmp](http://www.unix.com/man-page/POSIX/3posix/strcasecmp/)不在C或C++標準中。但是,它由POSIX.1-2001和4.4BSD定義。 – jweyrich

+0

在vs2010中正常工作.. – ghiboz

+0

在VS6中正常工作 –

9

我認爲它可以做

#include <string> 

的錯誤應該是固定的,如果你改變它到

#include <strings.h> 
5

正如我在以前的評論所提到的,strcasecmp不是在C或C++標準。但是,它由POSIX.1-2001和4.4BSD定義。

假設你的系統是POSIX或BSD兼容的,你必須包括正確的頭:

#include <strings.h>