Что значит необъявленный идентификатор
Что такое ошибка «необъявленный идентификатор» и как ее исправить?
Что такое необъявленные ошибки идентификатора? Каковы общие причины и как их исправить?
Пример текстов ошибок:
Решение
Чаще всего они приходят из-за того, что забывают включить заголовочный файл, содержащий объявление функции, например, эта программа выдаст ошибку «необъявленный идентификатор»:
Отсутствует заголовок
Чтобы это исправить, мы должны включить заголовок:
Переменная с ошибкой
Другой распространенный источник ошибки новичка возникает, когда вы неправильно написали переменную:
Неправильный объем
Например, этот код выдаст ошибку, потому что вам нужно использовать std::string :
Использовать до объявления
g не был объявлен до его первого использования. Чтобы это исправить, либо переместите определение g до f :
Или добавить декларацию g до f :
stdafx.h не сверху (специфично для VS)
Это зависит от Visual Studio. В VS нужно добавить #include «stdafx.h» перед любым кодом. Код до того, как он игнорируется компилятором, так что если у вас есть это:
#include будет проигнорировано Вам нужно переместить его ниже:
Не стесняйтесь редактировать этот ответ.
Другие решения
Рассмотрим похожую ситуацию в разговоре. Представьте, что ваш друг говорит вам: «Боб идет на ужин», а ты не представляешь, кто такой Боб. Вы будете в замешательстве, верно? Твой друг должен был сказать: «У меня есть коллега по работе по имени Боб. Боб подходит к обеду». Теперь Боб объявлен, и вы знаете, о ком говорит ваш друг.
Компилятор выдает ошибку «необъявленный идентификатор», когда вы пытаетесь использовать какой-то идентификатор (который будет именем функции, переменной, класса и т. Д.), И компилятор не видит объявления для него. То есть компилятор понятия не имеет, о чем вы говорите, потому что раньше его не видел.
Если вы получаете такую ошибку в C или C ++, это означает, что вы не сказали компилятору о том, что вы пытаетесь использовать. Объявления часто встречаются в заголовочных файлах, поэтому, скорее всего, это означает, что вы не включили соответствующий заголовок. Конечно, может случиться так, что вы просто не помните, чтобы объявить сущность вообще.
У меня была такая же проблема с пользовательским классом, который был определен в пространстве имен. Я пытался использовать класс без пространства имен, вызывая ошибку компилятора «идентификатор» MyClass «не определен».
Добавление
или используя класс, как
В C и C ++ все имена должны быть объявлены перед использованием. Если вы попытаетесь использовать имя переменной или функции, которая не была объявлена, вы получите ошибку «необъявленный идентификатор».
Однако функции — это особый случай в C (и только в C), в котором вам не нужно сначала объявлять их. Компилятор C будет предполагать, что функция существует с числом и типом аргументов, как в вызове. Если фактическое определение функции не совпадает, вы получите еще одну ошибку. Этот особый случай для функций не существует в C ++.
Вы исправляете ошибки такого рода, проверяя, что функции и переменные объявлены до их использования. В случае printf вам нужно включить заголовочный файл (или же в C ++).
Эти сообщения об ошибках
означает, что вы используете имя printf но компилятор не видит, где было объявлено имя, и, соответственно, не знает, что это значит.
Любое имя, используемое в программе, должно быть объявлено до ее использования. Компилятор должен знать, что обозначает имя.
Поэтому, прежде чем использовать эту функцию, мы должны предоставить объявление ее имени компилятору путем включения соответствующих заголовков.
Например
C:
Иногда причиной такой ошибки является простая опечатка. Например, давайте предположим, что вы определили функцию PrintHello
но в основном вы сделали опечатку и вместо PrintHello ты напечатал printHello с строчной буквы «р».
Другая возможная ситуация: доступ к родительскому элементу (классу шаблона) в классе шаблона.
Исправить метод: использование родительского члена класса по его полному имени (с помощью префикса this-> или же parentClassName:: на имя члена).
Это похоже на использование функции без ее объявления. заголовочный файл будет содержать
функция printf (). Включите заголовочный файл в вашу программу, это решение для этого.
Некоторые пользовательские функции могут также вызывать ошибки, если они не были объявлены перед использованием. Если
это используется во всем мире без проб.
В большинстве случаев, если вы уверены, что импортировали данную библиотеку, Visual Studio поможет вам с IntelliSense.
Ошибка компилятора C2065
Ниже приведены некоторые распространенные проблемы и более подробные решения.
Идентификатор не объявлен
Пример: идентификатор с ошибками
Эта ошибка обычно возникает, когда имя идентификатора написано неправильно или идентификатор использует неправильные прописные и строчные буквы. Имя в объявлении должно точно совпадать с именем, которое вы используете.
Пример. Использование неограниченного идентификатора
Идентификаторы, объявляемые внутри class типов, struct или, enum class также должны уточняться именем их включающей области при их использовании за пределами этой области.
Пример: предварительно скомпилированный заголовок не является первым
Эта ошибка может возникать, если вы поместили директивы препроцессора, такие как #include, #define или #pragma, перед #includeом предкомпилированного файла заголовка. Если исходный файл использует предварительно скомпилированный заголовочный файл (то есть если он компилируется с помощью параметра компилятора /Yu ), то все директивы препроцессора перед файлом предкомпилированного заголовка будут проигнорированы.
Чтобы устранить эту проблему, добавьте #include в файл предкомпилированного заголовка или переместите его после включения файла предкомпилированного заголовка в исходный файл.
Пример: отсутствует заголовочный файл
Вы не включили заголовочный файл, объявляющий идентификатор. Убедитесь, что файл, содержащий объявление идентификатора, включен в каждый исходный файл, который его использует.
Другая возможная причина заключается в том, что при использовании списка инициализаторов не включается <> заголовок initializer_list.
Пример: отсутствует закрывающая кавычка
Эта ошибка может возникать, если отсутствует закрывающая кавычка после строковой константы. Это простой способ запутывания компилятора. Обратите внимание, что пропущенная закрывающая кавычка может быть в нескольких строках перед сообщаемым расположением ошибки.
Пример. Использование итератора вне области действия цикла
Пример: объявление удаленного препроцессора
Эта ошибка может возникать, если вы ссылаетесь на функцию или переменную, которая находится в коде, скомпилированном по условию, который не компилируется для текущей конфигурации. Это также может произойти при вызове функции в файле заголовка, который в настоящее время не поддерживается в среде сборки. Если определенные переменные или функции доступны только при определении конкретного макроса препроцессора, убедитесь, что код, вызывающий эти функции, может быть скомпилирован только при определении одного и того же макроса препроцессора. Эту ошибку легко выявить в интегрированной среде разработки, так как объявление функции недоступно, если требуемые макросы препроцессора не определены для текущей конфигурации сборки.
Это пример кода, который работает при сборке в отладке, но не в розницу:
Пример: сбой выведения типа C++/CLI
Эта ошибка может возникать при вызове универсальной функции, если аргумент предполагаемого типа не может быть выведен из используемых параметров. Дополнительные сведения см. в разделе универсальные функции (C++/CLI).
Пример: параметры атрибута C++/CLI
эта ошибка также может быть вызвана работой по согласованности компилятора, выполненной для Visual Studio 2005: проверка параметров для Visual C++ных атрибутов.
Необъявленный идентификатор в шаблоне функции
Ошибка в объявлении функции (необъявленный идентификатор)
#pragma once #include typedef unsigned int ui; int GetNumberInt(); double.
Необъявленный идентификатор
Нужно исправить код, некоторые ошибки я нашел, но ничего не могу поделать с i (i: необъявленный.
Решение
Не совсем понимаю, о каком одном проходе идет речь. Если бы это было следствием какого-то одного прохода, то и исходный вариант с arrS компилировался бы. А он не компилируется.
что это за эксперимент такой?
ни жосиси, ни шланг это не едят.
или вы исходите из достоверности показаний тс?
Я поигрался с исходным примером по ссылке (http://rextester.com/ACBVC2230) и вижу, что оно каким-то волшебным образом компилирует варианты
А если убрать шаблонность
то на строчку int max = array[0]; лезет какая-то странная ругань вида
И я говорю о глюках конкретного компилятора. «Жосиси и шланг» ту ни при чем.
Непереводимая игра слов на местном наречии?
Что-то какая-то каша наблюдается.
Во-первых, видимо речь идет о «two-phase lookup». Однако переводить это как «двухпроходность» несколько странно. Для реализации правильного поведения совсем не обязательно делать какие-то множественные «проходы». Также спецификация языка вообще ничего не знает ни про какой «two-phase lookup», а определяет правильное поведение несколько иными методами.
endl необъявленный идентификатор
Необъявленный идентификатор
Думаю проблему в скобках, где не могу найти=( #include #include using.
Необъявленный идентификатор
Всем привет! Кто может помочь с кодом? Где моя ошибка. Нужно было написать программу для.
Необъявленный идентификатор
Подскажите где ошибка? Совсем не давно начал изучать С++. Вроде все правильно. а проверка все ровно.
Добавлено через 2 минуты
easybudda, спасибо! помогло, не знал что перед endl «std::» тоже нужно!
Добавлено через 30 секунд
Можете закрыть тему!
Вопрос решен!
Комментарий модератора | ||
|
Необъявленный идентификатор
addClientCommand( «m0d_tele_locations», (int)cmd_tele_locations ); addClientCommand(.
необъявленный идентификатор
#include #include using namespace std; int vichis(int,int,int&); void.
Необъявленный идентификатор
И снова ВСЕМ добрый вечер. ) Написав десяток примеров из книги, в качестве упражнений для себя.
Необъявленный идентификатор
Кто знает, где ошибка в этом коде? double *increase(unsigned int size, double *n) < double.
Необъявленный идентификатор
Нужно исправить код, некоторые ошибки я нашел, но ничего не могу поделать с i (i: необъявленный.
Ошибка компиляции — «необъявленный идентификатор»
Где ошибка? Пишет — необъявленный идентификатор, также как и в вызове функции, отсутствует список аргументов.
4 ответа 4
Код написан ПОЧТИ правильно, но ПОЧТИ не считается =)
Код с исправлением и комментарием об ошибке:
И не забывайте про табуляцию, всё же код читать будете не только Вы в будущем.
Объяви переменную sum. Если используешь C++ выше 11. То можно даже так
Укажите тип переменной sum и поставьте оператор вывода перед endl.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.12.6.40898
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.