簡體   English   中英

string.h和<string>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM