簡體   English   中英

關於在C ++中使用#include預處理程序指令

[英]About Use of #include Preprocessor Directive in C++

我偶然發現g ++編譯器在C ++中出現以下編譯錯誤:

error on line line 1 with message:
invalid preprocessing directive #a

(在字符a上方有一個插入號),然后在第4行出現另一個可能是錯誤的消息:

cout was not declared in this scope. 

我正在使用的編輯器是mingw的代碼塊10.05。我試圖從iostream文件include語句中刪除.h擴展名;在不同的File編碼選項之間切換;並用單引號和雙引號替換尖括號。 it.Pardon如果它是重復的(盡管我經歷了幾個相關的已經問過的問題)。 以下代碼說明了該問題:

#‪include ‬<iostream.h>
int main()
{
cout<< "abc"+8;
cout<< "def"+4;
cout<< "ha";
return 0;
}

cout存在於命名空間std

所以要么

#‪include‬<iostream>
//...
std::cout << "abc" << 8;
//...

要么

#‪include‬<iostream>
using namespace std;

//...

要么

#‪include‬<iostream>
using std::cout;

//...

如果只使用一次或兩次,則傾向於使用第一個;如果使用命名空間中的許多不同部分(並且僅在cpp文件中),則使用第二個;如果僅使用一次,則傾向於第一個一個名稱空間中的一個或兩個,但多次使用相同的幾次。

此外,如評論中所述,請勿在標題中使用第二個。 請參閱: C ++標頭中的“使用名稱空間”

另外,您的#include中包含無效字符。 您可以在十六進制編輯器中看到它,或注意stackoverflow如何將它們突出顯示為不同:

#‪include‬<iostream>
#include<iostream>

完整的工作代碼:

#include<iostream>

using std::cout;

int main()
{
    cout << "abc" << 8;
    cout << "def" << 4;
    cout << "ha";
    return 0;
}

在更正試圖將8加到char*后,產生了以下輸出abc8def4ha

您必須使用std :: cout,這意味着“ cout”關鍵字是標准庫的一部分。

“無效指令”錯誤是由#include指令中的一些不可見的Unicode字符引起的。 也許您是從某個網站復制的,該網站在代碼中嵌入了一些格式字符。 如果您在十六進制編輯器中查看源代碼,則可以在問題中看到它們。 該錯誤應通過刪除並重新鍵入#include行來解決。

您可能還會遇到其他錯誤,因為代碼已過期十五年; 大多數現代的編譯器不提供標准庫。 這些天,標准庫頭沒有.h擴展名:

#include <iostream>

它們聲明的幾乎所有名稱都作用於std名稱空間內:

std::cout << "ha";

最后, "abc"+8不會做任何明智的事情。 字符串文字是由四個字符組成的數組, +8嘗試為您提供第九個字符的指針,該字符不存在。 結果是不確定的行為。

如果要打印“ abc”,然后打印“ 8”,則需要:

std::cout << "abc" << 8;

嘗試像這樣使用它:-

#‪include ‬<iostream>
using std :: cout;

coutstd庫的一部分

如果您的插入符號大於a,請嘗試重新輸入#include。 您可能會不小心鍵入看起來相似但代碼不同的替代項i。 關於std ::的建議僅與您遇到的第二個錯誤有關。 我也不太了解您要使用“ abc” +8實現的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM