程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 編譯錯誤-string在頭文件中編譯時提示缺少“;”,求解

編譯錯誤-string在頭文件中編譯時提示缺少“;”,求解

編輯:編程綜合問答
string在頭文件中編譯時提示缺少“;”,求解

碰到一個神奇的問題:
//在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中。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved