Posted on 2007-08-03 13:01
寶杉 閱讀(413)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
C++
錯(cuò)誤:
#include <iostream.h>
#include <string.h>
……
string st("test string");
……
error C2065: 'string' : undeclared identifier
解釋:
#include <string>
using namespace std;
因?yàn)樵? using namespace std; 情況下,
#include <string> 是使用 C++ string 類庫(kù);
#include <cstring> 是使用 C 的string 操作庫(kù)函數(shù) ...
細(xì)節(jié) 加不加“.h”
#include <iostream.h>
#include <string>
using namespace std;
沒(méi)有錯(cuò)!!
而
#include <iostream.h>
#include <string.h>
using namespace std;
編譯有錯(cuò)!!
解釋
“string.h“這個(gè)頭文件是“舊式c頭文件”,而這個(gè)文件中沒(méi)有定義string類(這點(diǎn)應(yīng)該不奇怪,c語(yǔ)言中哪有什么類啊),這個(gè)頭文件里面是有關(guān)“舊式char-based字符串”的操作函數(shù),注意都是操作char*字符串的“函數(shù)”,所以你引用這個(gè)頭文件,編譯器肯定找不到“string”了。
“string”這個(gè)頭文件(沒(méi)有擴(kuò)展名)是C++標(biāo)準(zhǔn)化之后的C++頭文件,里面才有string類的相關(guān)定義(其實(shí),string并不是類,是一個(gè)typedef,但是使用的時(shí)候不用去管他),而C++標(biāo)準(zhǔn)頭文件中的東西都放在namespace std中了,所以使用的時(shí)候要“using namespace std”。
附:建議樓主不要用"iostream.h",改成“iostream”吧,因?yàn)闃?biāo)準(zhǔn)已經(jīng)明確規(guī)定不在支持"iostream.h"這種頭文件了。
標(biāo)準(zhǔn)寫(xiě)法
#include <iostream>
#include <string>
using namespace std;
F: 為什么using namespace std;
要寫(xiě)在include后面?
Q: 因?yàn)閕nclude的文件包含名字域std
如果你把using namespace std寫(xiě)在前面,編譯器就看不到std這個(gè)名字