Об использовании директивы препроцессора #include при переполнении стека

Я наткнулся на следующую ошибку компиляции в C ++ с компилятором g ++:

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

(с кареткой над символом а), за которой следует еще одна, вероятно, последующая ошибка в строке 4 с сообщением:

cout was not declared in this scope.

Я использую редактор с блоками кода 10.05 с mingw. Я попытался удалить расширение .h из оператора include файла iostream, переключиться между различными вариантами кодирования файлов, а также заменить угловую скобку одинарными и двойными кавычками. Я застрял на извините, если это дубликат (хотя я прошел через несколько уже заданных вопросов по релевантности).
Следующий код иллюстрирует проблему:

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

-1

Решение

cout существует в пространстве имен std

Так что либо

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

или же

#‪include‬<iostream>
using namespace std;

//...

или же

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

//...

Я обычно предпочитаю первый, если я использую его только один или два раза, второй, если я использую много разных частей из пространства имен (и только в файле cpp), или третий, если я использую только кусок или 2 из пространства имен, но используя одну и ту же пару раз.

Кроме того, как указано в комментариях, не используйте второй в заголовках. Увидеть: "используя пространство имен" в заголовках с ++

Кроме того, в вашем #include есть недопустимый символ. Вы можете увидеть это в шестнадцатеричном редакторе или заметьте, что stackoverflow не выделяет их одинаково:

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

Полностью рабочий код:

#include<iostream>

using std::cout;

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

Производит следующий вывод abc8def4ha после того, как я исправил попытку добавить 8 к char*

2

Другие решения

Вы должны использовать std :: cout, что означает, что ключевое слово «cout» является частью стандартной библиотеки.

2

Ошибка «неверная директива» вызвана некоторыми невидимыми символами Юникода в #include директива; возможно, вы скопировали это с веб-сайта, на котором были вставлены символы форматирования в коде. Их можно увидеть в вопросе, если вы посмотрите на источник в шестнадцатеричном редакторе. Эта ошибка должна быть исправлена ​​путем удаления и повторного ввода #include линия.

Вероятно, у вас будут другие ошибки, так как код устарел на пятнадцать лет; большинство современных компиляторов не предоставляют предварительно стандартные библиотеки. В наши дни стандартные заголовки библиотеки не имеют .h расширение:

#include <iostream>

и почти все имена, которые они объявляют, находятся внутри std Пространство имен:

std::cout << "ha";

В заключение, "abc"+8 не делает ничего толкового. Строковый литерал представляет собой массив из четырех символов, и +8 пытается дать вам указатель на девятый символ, который не существует. Результатом является неопределенное поведение.

Если вы хотите напечатать «abc», а затем «8», то вы хотите:

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

Попробуйте использовать это так:

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

cout является частью std библиотека

1

Если у вас есть курсор выше a, попробуйте еще раз набрать #include.
Вы можете случайно набрать альтернативу I, которая похожа, но имеет другой код.
Предложения о std :: имеют отношение только ко второй получаемой вами ошибке.
Я также не до конца понял, чего вы пытались достичь с помощью «abc» +8.

1
По вопросам рекламы [email protected]