Remkomplekty.ru

IT Новости из мира ПК
8 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ошибка необъявленный идентификатор

Что такое ошибка «необъявленного идентификатора» и как его исправить?

24 sashoalm [2014-03-05 14:55:00]

Что такое необъявленные ошибки идентификатора? Каковы общие причины и как их исправить?

Примеры текстов ошибок:

  • Для компилятора Visual Studio: error C2065: ‘printf’ : undeclared identifier
  • Для компилятора GCC: `printf’ undeclared (first use in this function)

c++ declaration compiler-errors

8 ответов

41 sashoalm [2014-03-05 14:55:00]

Они чаще всего приходят из забывания включить заголовочный файл, содержащий объявление функции, например, эта программа даст ошибку «необъявленного идентификатора»:

Отсутствует заголовок

Чтобы исправить это, мы должны включить заголовок:

Если вы написали заголовок и включили его правильно, заголовок может содержать неправильный include guard.

Неверная переменная

Другой распространенный источник ошибки начинающего возникает, когда вы ошибочно написали переменную:

Неверная область действия

Например, этот код даст ошибку, потому что вам нужно использовать std::string :

Использовать перед объявлением

g не был объявлен до его первого использования. Чтобы исправить это, переместите определение g до f :

Или добавьте объявление g до f :

Не стесняйтесь редактировать этот ответ.

Рассмотрим аналогичную ситуацию в разговоре. Представьте, что ваш друг говорит вам: «Боб подходит к обеду», и вы не знаете, кто такой Боб. Вы будете в замешательстве, верно? Ваш друг должен был сказать: «У меня есть коллега по работе по имени Боб. Боб подходит к обеду». Теперь Боб был объявлен, и вы знаете, о чём говорит ваш друг.

Компилятор испускает ошибку «необъявленного идентификатора», когда вы пытаетесь использовать какой-то идентификатор (что будет именем функции, переменной, класса и т.д.), и компилятор не видел для него объявления. То есть, компилятор понятия не имеет, о чем вы говорите, потому что раньше этого не видел.

Если вы получаете такую ​​ошибку в C или С++, это означает, что вы не сказали компилятору о том, что вы пытаетесь использовать. Объявления часто встречаются в заголовочных файлах, поэтому, вероятно, это означает, что вы не включили соответствующий заголовок. Конечно, возможно, вы просто не помнили, чтобы вообще объявлять сущность.

Некоторые компиляторы дают более конкретные ошибки в зависимости от контекста. Например, попытка скомпилировать X x; , где тип X не был объявлен с clang, скажет вам «неизвестное имя типа X «. Это гораздо более полезно, потому что вы знаете, что пытаетесь интерпретировать X как тип. Однако, если у вас есть int x = y; , где y еще не объявлен, он скажет вам «использование незаявленного идентификатора y «, потому что существует некоторая неопределенность в отношении того, что может представлять собой y .

В C и С++ все имена должны быть объявлены до их использования. Если вы попытаетесь использовать имя переменной или функцию, которая не была объявлена, вы получите ошибку «необъявленный идентификатор».

Однако функции являются частным случаем в C (и только в C), поскольку вам не нужно сначала объявлять их. Компилятор C будет считать, что функция существует с количеством и типом аргументов, как в вызове. Если фактическое определение функции не соответствует, вы получите еще одну ошибку. Этот специальный случай для функций не существует в С++.

Вы исправляете эти ошибки, убедившись, что функции и переменные объявлены до их использования. В случае printf вам нужно включить заголовочный файл (или в С++).

Для стандартных функций я рекомендую вам проверить, например. этот справочный сайт и выполните поиск функций, которые вы хотите использовать. Документация для каждой функции сообщает вам, какой файл заголовка вам нужен.

Эти сообщения об ошибках

означает, что вы используете имя printf , но компилятор не видит, где было объявлено имя и, соответственно, не знает, что это значит.

Любое имя, используемое в программе, должно быть объявлено до его использования. Компилятор должен знать, что означает это имя.

В этом конкретном случае компилятор не видит объявления с именем printf . Как мы знаем (но не компилятор), это имя стандартной функции C, объявленной в заголовке в C или в заголовке в С++, и помещается в стандартную ( std:: ) и глобальную ( :: ) ( не обязательно) пространства имен.

Поэтому перед использованием этой функции мы должны предоставить объявление своего имени компилятору, включив соответствующие заголовки.

Например С

С++:

Иногда причиной такой ошибки является простая опечатка. Например, допустим, что вы определили функцию PrintHello

но в основном вы сделали опечатку, а вместо PrintHello вы набрали PrintHello строчной буквой «p».

В этом случае компилятор выдает такую ​​ошибку, потому что не видит объявления имени PrintHello . PrintHello и PrintHello — это два разных имени, одно из которых было объявлено, а другое не было объявлено, а использовано в теле основного

У меня была та же проблема с пользовательским классом, который был определен в пространстве имен. Я попытался использовать класс без пространства имен, в результате чего ошибка «идентификатор» компилятора MyClass «undefined». Добавление

или используя класс, подобный

0 Ishmeet [2014-03-05 15:06:00]

Каждая необъявленная переменная в ошибке c возникает из-за того, что компилятор не может найти ее в проекте. Можно включить внешний (заголовочный) файл библиотеки, в которой определена переменная. Следовательно, в вашем вопросе вам требуется , который является стандартным входным выходным файлом, который описывает функции printf(),

0 Q_SaD [2014-03-05 15:03:00]

Это похоже на использование функции без объявления ее. заголовочный файл будет содержать функция printf(). Включите файл заголовка в свою программу, это решение для этого. Некоторые пользовательские функции также могут быть вызваны ошибкой, если они не были объявлены перед использованием. Если он используется глобально без проблем.

Проверьте, импортируете ли вы те же пакеты в своем .m и в своем .h Пример: у меня была эта проблема с методом init, и это было вызвано отсутствием «#import» в .m файле

Что такое ошибка «необъявленный идентификатор» и как ее исправить?

Что такое необъявленные ошибки идентификатора? Каковы общие причины и как их исправить?

Пример текстов ошибок:

  • Для компилятора Visual Studio: error C2065: ‘cout’ : undeclared identifier
  • Для компилятора GCC: ‘cout’ undeclared (first use in this function)

Решение

Чаще всего они приходят из-за того, что забывают включить заголовочный файл, содержащий объявление функции, например, эта программа выдаст ошибку «необъявленный идентификатор»:

Отсутствует заголовок

Чтобы это исправить, мы должны включить заголовок:

Если вы написали заголовок и включили его правильно, заголовок может содержать неправильный включить охрану .

Переменная с ошибкой

Другой распространенный источник ошибки новичка возникает, когда вы неправильно написали переменную:

Неправильный объем

Например, этот код выдаст ошибку, потому что вам нужно использовать std::string :

Использовать до объявления

g не был объявлен до его первого использования. Чтобы это исправить, либо переместите определение g до f :

Или добавить декларацию g до f :

stdafx.h не сверху (специфично для VS)

Это зависит от Visual Studio. В VS нужно добавить #include «stdafx.h» перед любым кодом. Код до того, как он игнорируется компилятором, так что если у вас есть это:

#include будет проигнорировано Вам нужно переместить его ниже:

Не стесняйтесь редактировать этот ответ.

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

Рассмотрим похожую ситуацию в разговоре. Представьте, что ваш друг говорит вам: «Боб идет на ужин», а ты не представляешь, кто такой Боб. Вы будете в замешательстве, верно? Твой друг должен был сказать: «У меня есть коллега по работе по имени Боб. Боб подходит к обеду». Теперь Боб объявлен, и вы знаете, о ком говорит ваш друг.

Компилятор выдает ошибку «необъявленный идентификатор», когда вы пытаетесь использовать какой-то идентификатор (который будет именем функции, переменной, класса и т. Д.), И компилятор не видит объявления для него. То есть компилятор понятия не имеет, о чем вы говорите, потому что раньше его не видел.

Если вы получаете такую ​​ошибку в C или C ++, это означает, что вы не сказали компилятору о том, что вы пытаетесь использовать. Объявления часто встречаются в заголовочных файлах, поэтому, скорее всего, это означает, что вы не включили соответствующий заголовок. Конечно, может случиться так, что вы просто не помните, чтобы объявить сущность вообще.

Некоторые компиляторы выдают более конкретные ошибки в зависимости от контекста. Например, пытаясь скомпилировать X x; где тип X не был объявлен с Clang скажет вам «неизвестное имя типа X «. Это гораздо полезнее, потому что вы знаете, что он пытается интерпретировать X как тип. Тем не менее, если у вас есть int x = y; , где y еще не объявлено, он скажет вам «использование необъявленного идентификатора y «потому что есть некоторая двусмысленность в том, что именно y может представлять.

Читать еще:  Ошибка маппинга данных атрибут содержимого content

У меня была такая же проблема с пользовательским классом, который был определен в пространстве имен. Я пытался использовать класс без пространства имен, вызывая ошибку компилятора «идентификатор» MyClass «не определен».
Добавление

или используя класс, как

В C и C ++ все имена должны быть объявлены перед использованием. Если вы попытаетесь использовать имя переменной или функции, которая не была объявлена, вы получите ошибку «необъявленный идентификатор».

Однако функции — это особый случай в C (и только в C), в котором вам не нужно сначала объявлять их. Компилятор C будет предполагать, что функция существует с числом и типом аргументов, как в вызове. Если фактическое определение функции не совпадает, вы получите еще одну ошибку. Этот особый случай для функций не существует в C ++.

Вы исправляете ошибки такого рода, проверяя, что функции и переменные объявлены до их использования. В случае printf вам нужно включить заголовочный файл (или же в C ++).

Для стандартных функций я рекомендую вам проверить, например, этот справочный сайт , и найдите функции, которые вы хотите использовать. Документация для каждой функции говорит вам, какой заголовочный файл вам нужен.

Эти сообщения об ошибках

означает, что вы используете имя printf но компилятор не видит, где было объявлено имя, и, соответственно, не знает, что это значит.

Любое имя, используемое в программе, должно быть объявлено до ее использования. Компилятор должен знать, что обозначает имя.

В этом конкретном случае компилятор не видит объявление имени printf , Как мы знаем (но не компилятор) это имя стандартной функции C, объявленной в заголовке в C или в заголовке в C ++ и размещены в стандарте ( std:: ) и глобальный ( :: ) (не обязательно) пространства имен.

Поэтому, прежде чем использовать эту функцию, мы должны предоставить объявление ее имени компилятору путем включения соответствующих заголовков.

Например
C:

C ++:

Иногда причиной такой ошибки является простая опечатка. Например, давайте предположим, что вы определили функцию PrintHello

но в основном вы сделали опечатку и вместо PrintHello ты напечатал printHello с строчной буквы «р».

В этом случае компилятор выдаст такую ​​ошибку, потому что он не видит объявление имени printHello , PrintHello а также printHello два разных имени, одно из которых было объявлено, а другое не объявлено, но используется в теле основного

Другая возможная ситуация: доступ к родительскому элементу (классу шаблона) в классе шаблона.

Исправить метод: использование родительского члена класса по его полному имени (с помощью префикса this-> или же parentClassName:: на имя члена).

Это похоже на использование функции без ее объявления. заголовочный файл будет содержать
функция printf (). Включите заголовочный файл в вашу программу, это решение для этого.
Некоторые пользовательские функции могут также вызывать ошибки, если они не были объявлены перед использованием. Если
это используется во всем мире без проб.

В большинстве случаев, если вы уверены, что импортировали данную библиотеку, Visual Studio поможет вам с IntelliSense.

Error c2065 cin необъявленный идентификатор

Что такое необъявленные ошибки идентификатора? Каковы общие причины и как их исправить?

Пример текстов ошибок:

  • Для компилятора Visual Studio: error C2065: ‘cout’ : undeclared identifier
  • Для компилятора GCC: ‘cout’ undeclared (first use in this function)

Решение

Чаще всего они приходят из-за того, что забывают включить заголовочный файл, содержащий объявление функции, например, эта программа выдаст ошибку «необъявленный идентификатор»:

Отсутствует заголовок

Чтобы это исправить, мы должны включить заголовок:

Если вы написали заголовок и включили его правильно, заголовок может содержать неправильный включить охрану .

Переменная с ошибкой

Другой распространенный источник ошибки новичка возникает, когда вы неправильно написали переменную:

Неправильный объем

Например, этот код выдаст ошибку, потому что вам нужно использовать std::string :

Использовать до объявления

g не был объявлен до его первого использования. Чтобы это исправить, либо переместите определение g до f :

Или добавить декларацию g до f :

stdafx.h не сверху (специфично для VS)

Это зависит от Visual Studio. В VS нужно добавить #include «stdafx.h» перед любым кодом. Код до того, как он игнорируется компилятором, так что если у вас есть это:

#include будет проигнорировано Вам нужно переместить его ниже:

Не стесняйтесь редактировать этот ответ.

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

Рассмотрим похожую ситуацию в разговоре. Представьте, что ваш друг говорит вам: «Боб идет на ужин», а ты не представляешь, кто такой Боб. Вы будете в замешательстве, верно? Твой друг должен был сказать: «У меня есть коллега по работе по имени Боб. Боб подходит к обеду». Теперь Боб объявлен, и вы знаете, о ком говорит ваш друг.

Компилятор выдает ошибку «необъявленный идентификатор», когда вы пытаетесь использовать какой-то идентификатор (который будет именем функции, переменной, класса и т. Д.), И компилятор не видит объявления для него. То есть компилятор понятия не имеет, о чем вы говорите, потому что раньше его не видел.

Если вы получаете такую ​​ошибку в C или C ++, это означает, что вы не сказали компилятору о том, что вы пытаетесь использовать. Объявления часто встречаются в заголовочных файлах, поэтому, скорее всего, это означает, что вы не включили соответствующий заголовок. Конечно, может случиться так, что вы просто не помните, чтобы объявить сущность вообще.

Некоторые компиляторы выдают более конкретные ошибки в зависимости от контекста. Например, пытаясь скомпилировать X x; где тип X не был объявлен с Clang скажет вам «неизвестное имя типа X «. Это гораздо полезнее, потому что вы знаете, что он пытается интерпретировать X как тип. Тем не менее, если у вас есть int x = y; , где y еще не объявлено, он скажет вам «использование необъявленного идентификатора y «потому что есть некоторая двусмысленность в том, что именно y может представлять.

У меня была такая же проблема с пользовательским классом, который был определен в пространстве имен. Я пытался использовать класс без пространства имен, вызывая ошибку компилятора «идентификатор» MyClass «не определен».
Добавление

или используя класс, как

В C и C ++ все имена должны быть объявлены перед использованием. Если вы попытаетесь использовать имя переменной или функции, которая не была объявлена, вы получите ошибку «необъявленный идентификатор».

Однако функции — это особый случай в C (и только в C), в котором вам не нужно сначала объявлять их. Компилятор C будет предполагать, что функция существует с числом и типом аргументов, как в вызове. Если фактическое определение функции не совпадает, вы получите еще одну ошибку. Этот особый случай для функций не существует в C ++.

Вы исправляете ошибки такого рода, проверяя, что функции и переменные объявлены до их использования. В случае printf вам нужно включить заголовочный файл (или же в C ++).

Для стандартных функций я рекомендую вам проверить, например, этот справочный сайт , и найдите функции, которые вы хотите использовать. Документация для каждой функции говорит вам, какой заголовочный файл вам нужен.

Эти сообщения об ошибках

означает, что вы используете имя printf но компилятор не видит, где было объявлено имя, и, соответственно, не знает, что это значит.

Любое имя, используемое в программе, должно быть объявлено до ее использования. Компилятор должен знать, что обозначает имя.

В этом конкретном случае компилятор не видит объявление имени printf , Как мы знаем (но не компилятор) это имя стандартной функции C, объявленной в заголовке в C или в заголовке в C ++ и размещены в стандарте ( std:: ) и глобальный ( :: ) (не обязательно) пространства имен.

Поэтому, прежде чем использовать эту функцию, мы должны предоставить объявление ее имени компилятору путем включения соответствующих заголовков.

Например
C:

C ++:

Иногда причиной такой ошибки является простая опечатка. Например, давайте предположим, что вы определили функцию PrintHello

но в основном вы сделали опечатку и вместо PrintHello ты напечатал printHello с строчной буквы «р».

Читать еще:  Ворд 2020 не подчеркивает ошибки красным

В этом случае компилятор выдаст такую ​​ошибку, потому что он не видит объявление имени printHello , PrintHello а также printHello два разных имени, одно из которых было объявлено, а другое не объявлено, но используется в теле основного

Другая возможная ситуация: доступ к родительскому элементу (классу шаблона) в классе шаблона.

Исправить метод: использование родительского члена класса по его полному имени (с помощью префикса this-> или же parentClassName:: на имя члена).

Это похоже на использование функции без ее объявления. заголовочный файл будет содержать
функция printf (). Включите заголовочный файл в вашу программу, это решение для этого.
Некоторые пользовательские функции могут также вызывать ошибки, если они не были объявлены перед использованием. Если
это используется во всем мире без проб.

В большинстве случаев, если вы уверены, что импортировали данную библиотеку, Visual Studio поможет вам с IntelliSense.

На данный вопрос уже ответили:

Я только начал разбираться с плюсами. И тут же воткнулся в какой-то непонятный для меня косяк.

Вроде все верно. Но при компиляции ошибка:

Я почитал у вас тут похожие темы. Пишут, что область имен надо объявить, она есть. Вроде вообще все как надо. Я использую VS 2017 для написания кода. Объясните, пожалуйста, что не так.

Объясните мне неразумному. . еще раз.. .
Занимаюсь (пытаюсь) по книге «Освой самостоятельно С++ за 21 день». Но пытаюсь освоить через в Microsoft Visual Studio 2012. Итак код:

#include
int main()
Исходный код. cpp
1>d:my documentsdocumentsvisual studio 2012projectshellourok1_zadurok1_zadисходный код. cpp(6): error C2065: endl: необъявленный идентификатор
1>d:my documentsdocumentsvisual studio 2012projectshellourok1_zadurok1_zadисходный код. cpp(8): error C2065: endl: необъявленный идентификатор
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Как же грамотно и правильно переделать код, чтобы объявить идентификатор/ы и были объявлены переменные?

С надеждой и нетерпением буду ждать вашего ответа.

ra, спасибо. Помогло.
=Serje=, он не только ругается но и отказывается выполнять. Даже в заявленном в учебнике «Microsot Visual C++ 6.» Происходит хоть и выполнение, но с замечаниями.

Купил книгу «Пятое издание», когда уже 7-е. Кстати, что примечательно. Скачал Пример рекомендованный в самой «Microsoft Visual Studio 2012». И он отказывается выполняться или выполняется с замечаниями.

либо объявите явно использование пространства имен std в своей программе:

#include
using namespace std;
int main() Рубрика: Компьютеры

Error c2065 cin необъявленный идентификатор

Что такое необъявленные ошибки идентификатора? Каковы общие причины и как их исправить?

Пример текстов ошибок:

  • Для компилятора Visual Studio: error C2065: ‘cout’ : undeclared identifier
  • Для компилятора GCC: ‘cout’ undeclared (first use in this function)

Решение

Чаще всего они приходят из-за того, что забывают включить заголовочный файл, содержащий объявление функции, например, эта программа выдаст ошибку «необъявленный идентификатор»:

Отсутствует заголовок

Чтобы это исправить, мы должны включить заголовок:

Если вы написали заголовок и включили его правильно, заголовок может содержать неправильный включить охрану .

Переменная с ошибкой

Другой распространенный источник ошибки новичка возникает, когда вы неправильно написали переменную:

Неправильный объем

Например, этот код выдаст ошибку, потому что вам нужно использовать std::string :

Использовать до объявления

g не был объявлен до его первого использования. Чтобы это исправить, либо переместите определение g до f :

Или добавить декларацию g до f :

stdafx.h не сверху (специфично для VS)

Это зависит от Visual Studio. В VS нужно добавить #include «stdafx.h» перед любым кодом. Код до того, как он игнорируется компилятором, так что если у вас есть это:

#include будет проигнорировано Вам нужно переместить его ниже:

Не стесняйтесь редактировать этот ответ.

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

Рассмотрим похожую ситуацию в разговоре. Представьте, что ваш друг говорит вам: «Боб идет на ужин», а ты не представляешь, кто такой Боб. Вы будете в замешательстве, верно? Твой друг должен был сказать: «У меня есть коллега по работе по имени Боб. Боб подходит к обеду». Теперь Боб объявлен, и вы знаете, о ком говорит ваш друг.

Компилятор выдает ошибку «необъявленный идентификатор», когда вы пытаетесь использовать какой-то идентификатор (который будет именем функции, переменной, класса и т. Д.), И компилятор не видит объявления для него. То есть компилятор понятия не имеет, о чем вы говорите, потому что раньше его не видел.

Если вы получаете такую ​​ошибку в C или C ++, это означает, что вы не сказали компилятору о том, что вы пытаетесь использовать. Объявления часто встречаются в заголовочных файлах, поэтому, скорее всего, это означает, что вы не включили соответствующий заголовок. Конечно, может случиться так, что вы просто не помните, чтобы объявить сущность вообще.

Некоторые компиляторы выдают более конкретные ошибки в зависимости от контекста. Например, пытаясь скомпилировать X x; где тип X не был объявлен с Clang скажет вам «неизвестное имя типа X «. Это гораздо полезнее, потому что вы знаете, что он пытается интерпретировать X как тип. Тем не менее, если у вас есть int x = y; , где y еще не объявлено, он скажет вам «использование необъявленного идентификатора y «потому что есть некоторая двусмысленность в том, что именно y может представлять.

У меня была такая же проблема с пользовательским классом, который был определен в пространстве имен. Я пытался использовать класс без пространства имен, вызывая ошибку компилятора «идентификатор» MyClass «не определен».
Добавление

или используя класс, как

В C и C ++ все имена должны быть объявлены перед использованием. Если вы попытаетесь использовать имя переменной или функции, которая не была объявлена, вы получите ошибку «необъявленный идентификатор».

Однако функции — это особый случай в C (и только в C), в котором вам не нужно сначала объявлять их. Компилятор C будет предполагать, что функция существует с числом и типом аргументов, как в вызове. Если фактическое определение функции не совпадает, вы получите еще одну ошибку. Этот особый случай для функций не существует в C ++.

Вы исправляете ошибки такого рода, проверяя, что функции и переменные объявлены до их использования. В случае printf вам нужно включить заголовочный файл (или же в C ++).

Для стандартных функций я рекомендую вам проверить, например, этот справочный сайт , и найдите функции, которые вы хотите использовать. Документация для каждой функции говорит вам, какой заголовочный файл вам нужен.

Эти сообщения об ошибках

означает, что вы используете имя printf но компилятор не видит, где было объявлено имя, и, соответственно, не знает, что это значит.

Любое имя, используемое в программе, должно быть объявлено до ее использования. Компилятор должен знать, что обозначает имя.

В этом конкретном случае компилятор не видит объявление имени printf , Как мы знаем (но не компилятор) это имя стандартной функции C, объявленной в заголовке в C или в заголовке в C ++ и размещены в стандарте ( std:: ) и глобальный ( :: ) (не обязательно) пространства имен.

Поэтому, прежде чем использовать эту функцию, мы должны предоставить объявление ее имени компилятору путем включения соответствующих заголовков.

Например
C:

C ++:

Иногда причиной такой ошибки является простая опечатка. Например, давайте предположим, что вы определили функцию PrintHello

но в основном вы сделали опечатку и вместо PrintHello ты напечатал printHello с строчной буквы «р».

В этом случае компилятор выдаст такую ​​ошибку, потому что он не видит объявление имени printHello , PrintHello а также printHello два разных имени, одно из которых было объявлено, а другое не объявлено, но используется в теле основного

Другая возможная ситуация: доступ к родительскому элементу (классу шаблона) в классе шаблона.

Исправить метод: использование родительского члена класса по его полному имени (с помощью префикса this-> или же parentClassName:: на имя члена).

Это похоже на использование функции без ее объявления. заголовочный файл будет содержать
функция printf (). Включите заголовочный файл в вашу программу, это решение для этого.
Некоторые пользовательские функции могут также вызывать ошибки, если они не были объявлены перед использованием. Если
это используется во всем мире без проб.

В большинстве случаев, если вы уверены, что импортировали данную библиотеку, Visual Studio поможет вам с IntelliSense.

Читать еще:  Ошибка 424 vba

На данный вопрос уже ответили:

Я только начал разбираться с плюсами. И тут же воткнулся в какой-то непонятный для меня косяк.

Вроде все верно. Но при компиляции ошибка:

Я почитал у вас тут похожие темы. Пишут, что область имен надо объявить, она есть. Вроде вообще все как надо. Я использую VS 2017 для написания кода. Объясните, пожалуйста, что не так.

Объясните мне неразумному. . еще раз.. .
Занимаюсь (пытаюсь) по книге «Освой самостоятельно С++ за 21 день». Но пытаюсь освоить через в Microsoft Visual Studio 2012. Итак код:

#include
int main()
Исходный код. cpp
1>d:my documentsdocumentsvisual studio 2012projectshellourok1_zadurok1_zadисходный код. cpp(6): error C2065: endl: необъявленный идентификатор
1>d:my documentsdocumentsvisual studio 2012projectshellourok1_zadurok1_zadисходный код. cpp(8): error C2065: endl: необъявленный идентификатор
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Как же грамотно и правильно переделать код, чтобы объявить идентификатор/ы и были объявлены переменные?

С надеждой и нетерпением буду ждать вашего ответа.

ra, спасибо. Помогло.
=Serje=, он не только ругается но и отказывается выполнять. Даже в заявленном в учебнике «Microsot Visual C++ 6.» Происходит хоть и выполнение, но с замечаниями.

Купил книгу «Пятое издание», когда уже 7-е. Кстати, что примечательно. Скачал Пример рекомендованный в самой «Microsoft Visual Studio 2012». И он отказывается выполняться или выполняется с замечаниями.

либо объявите явно использование пространства имен std в своей программе:

#include
using namespace std;
int main() Рубрика: Компьютеры

C++ cout gives undeclared identifier

So, I have this question. Why does cout throws

I am using Visual Studio 2012 as an IDE and I am writing a school project. I have everything done except an example file. So I am trying to write something on the screen like this:

So the problem is with cout. printf works fine, but I want to use cout.

EDIT: I’ve changed «» to <> but it is not helping. Also I am using this code only for example. This is not the whole project.

Создан 31 май. 13 2013-05-31 13:41:31 Dekay

Try ‘#include ‘ – Andy Prowl 31 май. 13 2013-05-31 13:42:20

And use ‘std::cout’ or use the namespace. – Dirk 31 май. 13 2013-05-31 13:42:44

I believe the precompiled header must be the first line in the source. – chris 31 май. 13 2013-05-31 13:49:05

@chris Yes, assuming the project actually uses precompiled headers. – Angew 31 май. 13 2013-05-31 13:49:36

@Angew, Well, judging by the stdafx.h in the source, I figured it did. – chris 31 май. 13 2013-05-31 13:50:42

As Dirk pointed out, do not use ‘using namespace std;’. It will interfere when using using other namespace(s). – TheBlueCat 31 май. 13 2013-05-31 16:55:54

The quotes vs. angle brackets on the ‘#include’ directive, despite generating a great deal of traffic, has **nothing** to do with the problem here. Yes, it’s better style to use angle brackets for system headers, but style guidelines do not determine validity of code. I’m tempted to change the original question to eliminate this red herring, but that would make the answers look too much like nonsense. The problem is Microsoft’s notion of precompiled headers: they don’t follow the language rules. – Pete Becker 31 май. 13 2013-05-31 17:50:08

5 ответов

stdafx.h shall be the first include directive in your source file.

Switch files and convert the second include to <> , as other suggested.

See this post for more information.

thx, I just found that out by myself, but you are the only one with the actual fix 😀 😀 – Dekay 31 май. 13 2013-05-31 13:57:56

@user2440586, To be fair, it *is* a lot better to use angle brackets when including standard headers. – chris 31 май. 13 2013-05-31 14:04:22

instead of #include «iostream»

Secondly, it is generally considered bad practice to write using namespace std; , even though most courses start with that. It is better to only use what you actually need, in your case:

There is no need of «Secondly». He uses already «using namespace std;» – Tik0 31 май. 13 2013-05-31 13:43:49

oops, my bad . removed that – Marc Claesen 31 май. 13 2013-05-31 13:44:14

The question is why it fails when «» searches like <> when it fails. – chris 31 май. 13 2013-05-31 13:49:40

@Marc Claesen, it does not help. the same error is still thrown. – Dekay 31 май. 13 2013-05-31 13:50:57

By courtesy of @Jerry Coffin’s answer:

When you use , the compiler only looks in the system-designated directory/directories (e.g., whatever you’ve set in the include environment variable) for the header.

When you use » «, the compiler looks in the local directory first, and if that fails, re-searches just like you’d used . Technically, (i.e., according to the standard) that doesn’t have to be the «local» directory, but that’s how it works in essentially every compiler of which I’m aware).

EDIT:

However, the root cause is that stdafx.h is a precompiled header. Visual C++ will not compile anything before the #include «stdafx.h» in the source file, unless the compile option /Yu’stdafx.h’ is unchecked (by default); it assumes all code in the source up to and including that line is already compiled. However, it is still better to use <> with iostream not to confuse reader of the code.

Создан 31 май. 13 2013-05-31 13:42:38 taocp

The problem I see is that you contradict your answer with the quotation. My money’s on the PCH issue. – chris 31 май. 13 2013-05-31 13:53:21

@chris I think the last sentence ‘but that’s how it works in essentially every compiler of which I’m aware’ of quotation consolidates his answer. Feel free to correct me if the including quotation is not proper, thanks! – taocp 31 май. 13 2013-05-31 13:55:50

I believe he is referencing the fact that ‘#include «name»‘ searches in an implementation-defined manner before falling back to ‘#include ‘, but every sane compiler looks in the local directory. – chris 31 май. 13 2013-05-31 13:58:12

@chris OK. I agree. I understand your point now, since the compiler will finally search for headers as used ‘<>‘, then it contradicts my answer. So the real reason might be because when using «», a sane-compiler may stop looking if it cannot find in local directories. Is this true? – taocp 31 май. 13 2013-05-31 14:01:34

Not if it’s conforming. The standard mandates it pretend you used angle brackets if not found when using double quotation marks. – chris 31 май. 13 2013-05-31 14:03:17

@chris OK. I guess it would be better to remove the quotations and links. It seems a little weird to me now. The root cause is because ‘stdafx.h’ is a precompiled header and it must be the first include in the file. – taocp 31 май. 13 2013-05-31 14:04:45

@chris I decided to put it there to remind myself and other readers later. I also updated the answer. You are right, it is because PCH problem. Thank you! – taocp 31 май. 13 2013-05-31 14:08:36

If you use #include with the <> instead of «» then it should work. Right now, the compiler doesn’t know where to find the iostream library.

Also, you might want to change cout to cout for a new line so that it formats correctly.

If you are just advising to add a new line, then just advise to add a new line: ‘

This error also occurred in the Visual Studio 2017 IDE. Moving stdafx.h to the top solved the error.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×