Дополнительно
Что это 'необъявленный идентификатор' ошибки и как это исправить?
Какие ошибки необъявленный идентификатор? Каковы наиболее распространенные причины и способы их исправить?
Пример текста ошибки:
- Для компилятора Visual студии:
ошибка C2065: 'соиь' : необъявленный идентификатор
- Для компилятора GCC:
'соиь' незаявленных (первое использование в этой функции)
46
11
Они чаще всего приходят из забыв включить заголовочный файл, содержащий объявление функции, например, эта программа даст 'необъявленный идентификатор' ошибка:
Отсутствует заголовок
Рассмотрим аналогичную ситуацию в разговоре. Представьте, что ваш друг говорит вам: "не придет Боб на ужин" и ты даже не представляешь, Боб. Вы'ре собирается путать, верно? Ваш друг должен был сказать: "У меня есть коллега по работе по имени Боб. Боб приезжает на ужин." и теперь Боб был объявлен и вы знаете, кто ваш друг говорить.
Компилятор выдает 'необъявленный идентификатор' ошибка, когда вы пытались использовать некоторые идентификатор (что бы быть имя функции, переменной, класса и т. д.) и компилятор не видит объявление для него. То есть, компилятор не имеет понятия, что вы имеете в виду, потому что она'т видел его раньше.
Если вы получаете такие ошибки в C или C++, это означает, что вы не'т сказали компилятору о том, что вы пытаетесь использовать. Объявления часто встречаются в заголовочных файлах, так что, вероятно, означает, что вы не'т включен соответствующий заголовок. Конечно, это может быть, что вы просто не'т вспомнил объявить лицо на всех.
Некоторые компиляторы дают более конкретные ошибки в зависимости от контекста. Например, при попытке компиляции
Х Х
, где типх
не был объявлен с лязгом скажу тебя "неизвестное имя типаХ в
". Это гораздо полезнее, потому что вы это знаете'ы пытались интерпретироватьх
в качестве типа. Однако, если у вас есть тип int х = г;, где
Yявляется еще не объявлен, он скажет вам, что "использование необъявленный идентификатор
г в" потому что есть некоторая неясность, о каком именно
м` может представлять.У меня была такая же проблема с пользовательского класса, который был определен в пространстве имен. Я пытался использовать класс без имен, вызывает ошибку компилятора на"идентификатор "у класса MyClass, то" не определено" по. Добавление
или с помощью класса, как
решил проблему.
В C и C++ все имена должны быть объявлены прежде чем они используются. Если вы пытаетесь использовать имя переменной или функции, которые еще'т было задекларировано вы получите и"необъявленный идентификатор ошибка" ошибка.
Однако, функции представляют собой особый случай в C (и C) в том, что вы Don'т иметь, чтобы объявить их в первую очередь. Компилятор C будет предположим, что функция не существует с количество и тип аргументов при вызове. Если фактическое определение функции не совпадают, то возникает другая ошибка. Это особый случай для функции не существует в C++.
Вы исправить эти ошибки, убедившись, что функции и переменные объявлены прежде чем они используются. В случае
е
, вам необходимо включить заголовочный файл в<с stdio.ч>
(или в<с cstdio>
в C++).Для стандартных функций, я рекомендую вам проверить, например, эта ссылка на сайт, и найти функции, которые вы хотите использовать. В документации для каждой функции говорит вам, какой заголовочный файл нужно.
Эти ошибки meassages
означает, что вы используете имя
е
, но компилятор не видит, где имя был объявлен и, соответственно, не знаю, что это значит.Любое имя, используемое в программе, должно быть объявлено до его использования. Компилятор должен знать, что имя обозначает.
В данном конкретном случае компилятор не видит объявление название
Е
. Как мы знаем (а не компилятор) это название стандартной функции C заявленной в заголовке<студии.ч>
в C или в заголовок в<с cstdio>
в C++ и помещается в стандартный (СТД::) и Global (
::`) (не обязательно) пространствах имен.Поэтому прежде чем использовать эту функцию, мы должны обеспечить свое заявление имя компилятора, включая соответствующие заголовки.
Например С:
В C++:
Иногда причиной такой ошибки является простой опечаткой. Например, пусть'ы предположим, что вы определили функции PrintHello`
но в главном вы сделали опечатку и вместо
PrintHello
вы ввелиprintHello
с большой буквы 'Р'.В этом случае компилятор будет выдавать такую ошибку, потому что он не видит в декларации имя
printHello
.PrintHello
иprintHello
это два разных названия одной из которых был объявлен и другой не был объявлен, но используется в теле mainДругая возможная ситуация: доступ родителя (шаблонный класс) - члены класса шаблона.
Способ исправить: с помощью членов родительского класса его полное имя (с помощью префикса
это->
или `parentClassName:: на имя участника).см.: https://stackoverflow.com/questions/6592512/templates-parent-class-member-variables-not-visible-in-inherited-class?noredirect=1&lq=1
Каждый необъявленная переменная в C выходит ошибка, потому что компилятор не может найти его в проекте. Можно включать внешние (заголовок файла) библиотеке, в которой переменная определена. Поэтому на ваш вопрос, вы требуете
<студии.ч>
, что это стандартный поток ввода выходной файл, который описывает функции printf(), функциональность.Согласно документация, декларация fprintf() в <с cstdio и GT; т. е. вы должны включить его, прежде чем использовать эту функцию.
Это как с использованием функции без ее объявления. <из stdio.ч> заголовочный файл будет содержать функция printf(). Включить заголовочный файл в программу это решение для этого. Некоторые пользовательские функции также могут по ошибке, когда не объявлена перед использованием. Если он используется во всем мире нет проблем.
Большую часть времени, если вы не очень уверены, что вы импортировали библиотеку в вопрос, в Visual Studio будет направлять вас с технологией IntelliSense.
Вот то, что работал для меня:
Убедитесь, что
#включить "в файл stdafx.ч"
в объявлена первый, то есть в верхней части всех включает.В идентификаторах C++ - это имя, используемое для идентификации переменной, функции, класса, модуля или любой другой пользовательский элемент. В C++ все имена должны быть объявлены прежде чем они используются. Если вы пытаетесь использовать имя такое, что уже'т было задекларировано вы получите и"необъявленный идентификатор" и компиляции-ошибка.
Согласно документация, объявление функции printf() в с cstdio, т. е. вы должны включить его, прежде чем использовать эту функцию.
Проверить при импорте тех же самых пакетов в ваш .м и в вашем .ч Пример: у меня была эта проблема с init метод, и это было вызвано отсутствием в "#импорт <базе UIKit/базе UIKit.ч>" на .файл м