碰到一個神奇的問題:
//在head.h頭文件中寫如下代碼:
class A
{
public:
string name;
A (string);
};
結果編譯的時候出現name前缺少“;”,如果我真的在name前加上一個“;”,編譯的時候這個問題就沒了,你說神奇不?有人知道怎麼解決嗎?
如果把class A和源文件寫在一起就沒問了,搞的我莫名其妙。
C++為了安全,提供命名空間namespace的機制,指定了標識符的各種可見范圍。C++標准程序庫中的所有標識符都被定義於一個名為std的namespace中。
string也是數據std命名空間的,因此在使用C++標識符時以及一些函數時,除了包含頭文件還需要指定命名空間
。
使用命名空間有三種方式
①直接using namespace std;可以把左右std命名空間的內容全部引進來
這樣使用定義變量,直接使用string name即可
②using std::string,指定引用某個標識符。定義變量的方法,同上
③不用using關鍵字使用指定命名空間,但是但定義變量時手動指定,
即每次使用string時,指定std命名空間。std::string name;其他std::cout,std::cin,std::endl或者std::setw(2)等用法類似
都需要先包含頭文件,在引入命名空間
在C++中
和是不一樣,前者沒有後綴,實際上,在你的編譯器include文件夾裡面可以看到,二者是兩個文件,打開文件就會發現,裡面的代碼是不一樣的。
後綴為.h的頭文件c++標准已經明確提出不支持了,早些的實現將標准庫功能定義在全局空間裡,聲明在帶.h後綴的頭文件裡,c++標准為了和C區別開,也為了正確使用命名空間,規定頭文件不使用後綴.h。
因此,當使用時,相當於在c中調用庫函數,使用的是全局命名空間,也就是早期的c++實現;當使用的時候,該頭文件沒有定義全局命名空間,必須使用namespacestd;這樣才能正確使用cout。
C++標准程序庫中的所有標識符都被定義於一個名為std的namespace中。