2013-01-06 73 views
0

我是一個新手或新手,如果你喜歡這種方式在C++編程,我試圖使用std::,因爲有人告訴我這是一個好習慣,而不是把它放在using namespace std;,因爲它污染了全局命名空間。我不確定爲什麼std::cin >> name;從我的下面的代碼產生一個錯誤no operator '>>' matches these operands下面是完整的源代碼。我是否正確使用輸入/輸出流庫?

#include "stdafx.h" 
#include <ios> 
#include <iostream> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int x, y; 
    std::string name; 

    std::cin >> name; 
    std::cin >> x; 

    return 0; 
} 

回答

5

你忘了這一點:

#include<string> 

您使用std::string這是在上面的頭文件中定義。你需要包含它。

如果您使用標準庫中的任何內容,無論它是容器還是算法,請確保您已包含定義它們的相應標題。標準庫有很多頭文件,特別是容器。通常,每個容器都在其自己的頭文件中定義。

+1

非常感謝這麼多! – Rojee

+0

實際上我總是對這是否是必需的感到​​困惑。使用我的編譯器(在OS X上是鏗鏘3.1),我只能使用'iostream'而不是'string'。這是否僅僅是因爲一些C++庫包含來自'iostream'的'string'? – Xymostech

+2

@Xymostech是的,但不要指望它,只要編譯器對標準庫的實現更新,它就會改變。始終包含您使用的內容,不要依賴隱式包含。其實這適用於所有圖書館/標題,不僅僅是標準圖書館。 – KillianDS

2

你忘了

#include <string> 

而且

#include <ios> 

是沒有必要的。