VS 2017 C++ 編譯器指出 cout(或 cin, endl) 是一個未知標誌符——解決辦法
在VS 2017 中編寫的 main() 函式,執行,編譯報錯,編譯器指出 cout(或 cin, endl) 是一個未知標誌符(如下圖所示)。 其原因是沒有 名稱空間編譯指令,即,最常見的語句: using namespace std; // using 編譯指令
解決辦法
方法1:最簡單的方法,也是最常見的方法。 直接新增語句 using namespace std;
#include <iostream> int main() { using namespace std; cout << "Please enter your PIN: "; cout << endl; cin.get(); return 0; }
執行結果:
方法2 正規的方法(一般很少用):在使用 cout,cin, 或 endl 等,提前新增字首:std::
#include <iostream>
int main()
{
std::cout << "Please enter your PIN: ";
std::cout << std::endl;
std::cin.get();
return 0;
}
執行結果:
方法3 在使用 cout,cin, 或 endl 等,提前新增:
using std ::cout; using std ::cin; using std ::endl;
#include <iostream>
int main()
{
using std ::cout;
using std ::cin;
using std ::endl;
cout << "Please enter your PIN: ";
cout << endl;
cin.get();
return 0;
}
執行結果:
那麼問題來了,這是為什麼呢?
其實,名稱空間是C++特性,目的讓使用者編寫大型程式以及將多個廠商現有的程式碼組合起來的程式 更加容易,並且有助於組織程式。
舉個直觀的例子,假設百度和谷歌 兩家公司 可能使用已經封裝好的的產品,而它們都包含一個名為 haha( ) 的函式,那個有使用者想使用名為 haha( ) 的函式,若直接使用,則編譯器不知道指的是哪家公司(百度還是谷歌)的版本,則編譯器會報錯。因此,百度可以將其放到一個名為 Baidu 的名稱空間中;同樣,谷歌也可以將其放到名為 Google 的名稱空間中。其表示如下:
Baidu ::haha("la la"); // use Baidu namespace version Google ::haha("he he"); // use Google namespace version
按照這種方式,類,函式和變數便是C++編譯器的標準組件,它們都將被放置在名稱空間 std 中。 僅當頭檔案沒有副檔名 h 時,情況才如此。在 iostream 中定義的 cout, cin, endl 等變數實際上是: std::cout; std::cin; std::endl; 因此可以用以下方式進行編碼:
#include <iostream>
int main()
{
std::cout << "Please enter your PIN: ";
std::cout << std::endl;
std::cin.get();
return 0;
}
這也是上述的 方法2, 這是規範寫法 。在大多數情況下,很麻煩,於是 using編譯指令 出來了。(方法3)
using std::cout; using std::cin; using std::endl;
最後,最簡單的,也是最常見的方法(方法1),可以使用 std 名稱空間中定義的名稱 ,不必使用std:: 字首。其表示式如下:
using namespace std; // 方法1
總之:cout, cin, endl 等 使用的是C++標準名稱空間。