Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
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 вам нужно включить заголовочный файл (или в С++).

Читать еще:  System int32 c ошибка

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

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

означает, что вы используете имя 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 файле

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

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

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

    Для компилятора Visual Studio: error C2065: ‘cout’ : undeclared >Решение

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

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

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

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

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

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

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

Например, этот код выдаст ошибку, потому что вам нужно использовать 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 но компилятор не видит, где было объявлено имя, и, соответственно, не знает, что это значит.

Читать еще:  Smtp ошибка 550

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

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

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

Например
C:

C ++:

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

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

В этом случае компилятор выдаст такую ​​ошибку, потому что он не видит объявление имени 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() Рубрика: Компьютеры

Ссылка на основную публикацию
Adblock
detector