[英]string.h and <string>
我正在嘗試在舊版C ++項目中構建一個庫。 平台是使用gcc編譯器的power-pc。
編譯器給出類似於以下的生成錯誤 : 錯誤:字符串:沒有這樣的文件或目錄,或者錯誤:向量:沒有這樣的文件或目錄。
我的理解是它無法找到標准庫。 標准庫文件通常位於何處,並且采用哪種格式? 是* .h還是其他? 我在互聯網上搜索了此內容,但我認為我不太了解。
令人困惑的是,同一項目中使用相同源代碼文件的另一個庫完全可以構建。 這向我暗示這兩個項目的makefile可能不同,其中一個IS能夠找到std lib,而另一個沒有。 但是快速比較一下兩者並沒有帶來任何明顯的差異。 還有其他想法嗎?
最后,我剛剛了解到string.h用於C風格的字符串,而string用於C ++ std lib。 可以將它們混合在一起嗎,即源文件包含#include string.h,還可以通過包含其他文件來隱式包含#include字符串? 我問是因為這種情況在沒有構建的文件中也是如此。
謝謝。
錯誤信息:
編譯SOURCE_FILE.cpp
在SOURCE_FILE.cpp:3包含的文件中:
HDR_FILE.h:1:錯誤:字符串:沒有這樣的文件或目錄
HDR_FILE.h:2:錯誤:向量:沒有這樣的文件或目錄
SOURCE_FILE.cpp中的代碼
#include <stdlib.h>
#include <string.h>
#include "fileABC.h"
using namespace std;
// Other code
HRD_FILE.h中的代碼
#include <string>
#include <vector>
#include <hdr.h>
#include <hdr-cseq.h>
//... OTHER FILES ETC.
如果未將文件檢測為C ++源代碼,則可能會出現類似的錯誤。 是否使用適當的文件擴展名來命名c ++文件?
貓測試
#include <vector>
int main() {}
gcc test.c
test.c:1:18: error: vector: No such file or directory
上面的命令將編譯C代碼,但不會編譯C ++。 請記住,這是兩種不同的語言。 要構建C ++程序,您必須以一種或另一種方式告訴編譯器源是C ++。 如果您使用g ++,它將自動假定擴展名為'.c'的文件為C ++(至少我的版本是C ++。或者,您可以在傳遞文件之前通過-x c++
告訴編譯器使用C ++。您還必須告訴包含C ++庫的鏈接器,g ++也會自動執行此操作,也可以傳遞鏈接器標志-lstdc++
。
困難的方法:
gcc -x c ++ test.c -lstdc ++
簡單的方法:
g ++ test.c
為回答最后一個問題,您可以自由地混合<string.h>
和<string>
(盡管您可能應該使用<cstring>
而不是<string.h>
)。
C語言字符串不同於C ++ std :: string。
C語言字符串類型是由nul,零,'\\ 0'字符結尾的字符序列。 用於管理此數據結構的函數聲明分別在<string.h> or <cstring>
,具體取決於您是以C還是C ++進行編譯。
C ++ std :: string類型是字符的容器。 實際的實現在編譯器之間可能會有所不同,但接口不會。 std :: string的方法在<string>.
中聲明<string>.
必須設置編譯器以使用C ++語言進行編譯。
C ++ std :: string具有生成C語言字符串以及從C語言樣式字符串創建C ++字符串的方法。 閱讀標准模板庫以獲取更多信息。
另外,在網上搜索“ C ++ FAQ”。 這是在使用C ++語言進行編程之前必須閱讀的內容。 C語言也有一個常見問題解答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.