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

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

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

  • Для компилятора Visual студии: ошибка C2065: 'соиь' : необъявленный идентификатор
  • Для компилятора GCC: 'соиь' незаявленных (первое использование в этой функции)
Комментарии к вопросу (1)

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

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


int main() {
    std::cout 
Комментарии (4)

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

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

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

Некоторые компиляторы дают более конкретные ошибки в зависимости от контекста. Например, при попытке компиляции Х Х, где тип х не был объявлен с лязгом скажу тебя "неизвестное имя типа Х в". Это гораздо полезнее, потому что вы это знаете'ы пытались интерпретировать х в качестве типа. Однако, если у вас есть тип int х = г;, гдеYявляется еще не объявлен, он скажет вам, что "использование необъявленный идентификаторг в" потому что есть некоторая неясность, о каком именном` может представлять.

Комментарии (0)

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

using namespace 

или с помощью класса, как

MyNamespace::MyClass myClass;

решил проблему.

Комментарии (0)

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

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

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

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

Комментарии (0)

Эти ошибки meassages

1.For the Visual Studio compiler: error C2065: 'printf' : undeclared identifier
2.For the GCC compiler: `printf' undeclared (first use in this function)

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

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

В данном конкретном случае компилятор не видит объявление название Е . Как мы знаем (а не компилятор) это название стандартной функции C заявленной в заголовке <студии.ч> в C или в заголовок в &LT;с cstdio> в C++ и помещается в стандартный (СТД::) и Global (::`) (не обязательно) пространствах имен.

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

Например С:

#include 

int main( void )
{
   printf( "Hello World\n" );
}

В C++:

#include 

int main()
{
   std::printf( "Hello World\n" );
   // or printf( "Hello World\n" );
   // or ::printf( "Hello World\n" );
}

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

void PrintHello()
{
    std::printf( "Hello World\n" );
}

но в главном вы сделали опечатку и вместо PrintHello вы ввели printHello с большой буквы 'Р'.

#include 

void PrintHello()
{
    std::printf( "Hello World\n" );
}

int main()
{
   printHello();
}

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

Комментарии (1)

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

Способ исправить: с помощью членов родительского класса его полное имя (с помощью префикса это-> или `parentClassName:: на имя участника).

см.: https://stackoverflow.com/questions/6592512/templates-parent-class-member-variables-not-visible-in-inherited-class?noredirect=1&lq=1

Комментарии (0)

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

Согласно документация, декларация fprintf() в <с cstdio и GT; т. е. вы должны включить его, прежде чем использовать эту функцию.

Комментарии (1)

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

Комментарии (0)

Большую часть времени, если вы не очень уверены, что вы импортировали библиотеку в вопрос, в Visual Studio будет направлять вас с технологией IntelliSense.

Вот то, что работал для меня:

Убедитесь, что #включить "в файл stdafx.ч" в объявлена первый, то есть в верхней части всех включает.

Комментарии (0)

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

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

Комментарии (0)

Проверить при импорте тех же самых пакетов в ваш .м и в вашем .ч Пример: у меня была эта проблема с init метод, и это было вызвано отсутствием в "#импорт <базе UIKit/базе UIKit.ч>" на .файл м

Комментарии (0)