Visual studio идентификатор не определен
error C2039: 'cout': is not a member of 'std' (compiler internal)(256): note: see declaration of 'std' error C2065: 'cout': undeclared identifier error C2039: 'setprecision': is not a member of 'std' (compiler internal)(256): note: see declaration of 'std' error C3861: 'setprecision': identifier not found error C2039: 'cout': is not a member of 'std'
Почему компилятор не может найти std::cout или std::setprecision ?
Хорошо, все еще есть ошибки. @Thomas Я исправил заголовок iomanip, но не могу вставить весь текст, потому что из программы, потому что он превышает предел на 650 символов.
Также вы можете отключить предварительно скомпилированные заголовки. Они очень раздражают новичков и не дают большой экономии времени на сборку. Для больших проектов они могут сэкономить время на сборку.
Пожалуйста, прочтите минимальный воспроизводимый пример. Сократите свою программу до минимального количества кода, который воспроизводит вашу проблему. (Перед этим сделайте копию своей программы).
@KristaLittmann на самом деле люди пытаются вам помочь. Когда много людей комментируют, это может быть ошеломляющим, но если за вопрос проголосовали против или закрыли, разумно прислушаться к отзывам, чтобы вы могли улучшить свои будущие посты. Также не размещайте скриншоты кода. Разработчикам, пытающимся помочь вам, нужно скопировать и вставить код, чтобы попытаться запустить его, или отредактировать, чтобы написать ответ.
Я честно считаю, что этот вопрос был несправедливо отвергнут. Это то, что меня всегда раздражало. Как, черт возьми, от людей ожидать, что они будут редактировать свои посты и доводить их до нуля, когда за пост 8 человек проголосовали против? Где стимул?
Можно упомянуть конкретную версию компилятора Visual C++, которую вы используете. Помогает ли использование другого компилятора? Соответствует ли заголовок "pch.h" приведенному здесь примеру?
E_net4 the commentary remover
@YvetteColomb Спасибо, Иветт, что согласилась! Я чувствовал, что прямое голосование против без объяснения того, что именно я сделал не так, было очень противоречивым по сравнению с тем, что я пытаюсь достичь здесь. Я был очень открыт для отзывов в самом начале поста, но люди, которые мы все еще голосуем против, даже не давая мне возможности обновить вопрос.
@Blastfurnace вот чего мне не хватало! ха-ха! Благодарность!
Я пометил это как дубликат. Имя файла заголовка по умолчанию отличается в более новых версиях Visual Studio, но ответ тот же.
Хм, я не знал, что Microsoft изменила имя по умолчанию для своего предварительно скомпилированного заголовка. Моя вина.
Компилятору не удалось разрешить ссылку на идентификатор даже при поиске с зависимостью от аргументов.
Комментарии
Чтобы устранить эту ошибку, сравните использование идентификатора с объявлением идентификатора для Регистра и проверки орфографии. Убедитесь, что операторы разрешения области и пространство имен, использующие директивы , используются правильно. Если идентификатор объявлен в файле заголовка, убедитесь, что заголовок включен перед ссылкой на идентификатор. Если идентификатор должен быть видимым извне, убедитесь, что он объявлен в любом исходном файле, который его использует. Также убедитесь, что объявление идентификатора или определение не исключены директивами условной компиляции.
изменения в удалении устаревших функций из библиотеки времени выполнения C в Visual Studio 2015 могут вызвать C3861. Чтобы устранить эту ошибку, удалите ссылки на эти функции или замените их безопасными альтернативами, если они есть. Дополнительные сведения см. в разделе устаревшие функции.
если ошибка C3861 появляется после миграции проекта из предыдущих версий компилятора, могут возникнуть проблемы, связанные с поддерживаемыми версиями Windows. Visual C++ больше не поддерживает создание программ для Windows 95, Windows 98, Windows ME, Windows NT и Windows 2000. Если ваши макросы WINVER или _WIN32_WINNT предназначены для одной из этих версий Windows, необходимо изменить такие макросы. Дополнительные сведения см. в разделе изменение winver и _WIN32_WINNT.
Примеры
Неопределенный идентификатор
Следующий пример приводит к возникновению ошибки C3861, поскольку идентификатор не определен.
Идентификатор не находится в области
Следующий пример приводит к возникновению ошибки C3861, поскольку идентификатор виден только в области файла его определения, если только он не объявлен в других исходных файлах, которые его используют.
Требуется квалификация пространства имен
Для std классов исключений в стандартной библиотеке C++ требуется пространство имен.
Вызвана устаревшая функция
Устаревшие функции были удалены из библиотеки CRT.
Функции ADL и Friend
Следующий пример приводит к возникновению ошибки C3767, так как компилятор не может использовать поиск с зависимостью от аргумента для FriendFunc :
Чтобы устранить эту ошибку, объявите дружественную команду в области класса и определите ее в области видимости пространства имен:
Компилятору не удается найти объявление идентификатора. Эта ошибка имеет несколько возможных причин. Наиболее распространенными причинами C2065 является то, что идентификатор не был объявлен, идентификатор написан неправильно, заголовок, где объявляется идентификатор, не включается в файл, или в идентификаторе отсутствует квалификатор области, например, cout вместо std::cout . Дополнительные сведения об объявлениях в C++ см. в разделе объявления и определения (c++).
Ниже приведены некоторые распространенные проблемы и более подробные решения.
Идентификатор не объявлен
Если идентификатор является переменной или именем функции, его необходимо объявить перед тем, как его можно будет использовать. Перед использованием функции в объявлении функции также должны быть включены типы его параметров. Если переменная объявлена с помощью auto , компилятор должен иметь возможность определить тип из его инициализатора.
Если идентификатор является членом класса или структуры или объявлен в пространстве имен, он должен уточняться именем класса или структуры или именем пространства имен при использовании вне структуры, класса или области пространства имен. Кроме того, пространство имен должно быть помещено в область с помощью using директивы, такой как using namespace std; , или имя члена должно быть помещено в область с помощью using объявления, такого как using std::string; . В противном случае неполное имя считается необъявленным идентификатором в текущей области.
Если идентификатор является тегом для определяемого пользователем типа, например, class или struct , тип тега должен быть объявлен до его использования. Например, объявление struct SomeStruct < /*. */ >; должно существовать, прежде чем можно будет объявить переменную SomeStruct myStruct; в коде.
Если идентификатор является псевдонимом типа, тип должен быть объявлен с помощью using объявления или typedef перед тем, как его можно будет использовать. Например, необходимо объявить using my_flags = std::ios_base::fmtflags; , прежде чем можно будет использовать my_flags в качестве псевдонима типа для std::ios_base::fmtflags .
Пример: идентификатор с ошибками
Эта ошибка обычно возникает, когда имя идентификатора написано неправильно или идентификатор использует неправильные прописные и строчные буквы. Имя в объявлении должно точно совпадать с именем, которое вы используете.
Пример. Использование неограниченного идентификатора
Эта ошибка может возникать, если идентификатор не является правильно заданной областью. Если вы видите C2065 при использовании cout , это является причиной. Если функции и операторы стандартной библиотеки C++ не полностью определены в пространстве имен или вы не std передали пространство имен в текущую область с помощью using директивы, компилятор не сможет их найти. Чтобы устранить эту проблему, необходимо либо полностью определить имена идентификаторов, либо указать пространство имен с помощью using директивы.
Этот пример не компилируется, поскольку cout и endl определены в std пространстве имен:
Идентификаторы, объявляемые внутри class типов, struct или enum class , также должны уточняться именем их включающей области при их использовании за пределами этой области.
Пример: предварительно скомпилированный заголовок не является первым
Этот пример не удается скомпилировать, поскольку cout и endl определены в < заголовке iostream >, который игнорируется, так как он включается перед предкомпилированным файлом заголовка. Чтобы выполнить сборку этого примера, создайте все три файла, а затем скомпилируйте файл stdafx. cpp, а затем скомпилируйте C2065_pch. cpp.
Пример: отсутствует заголовочный файл
Вы не включили заголовочный файл, объявляющий идентификатор. Убедитесь, что файл, содержащий объявление идентификатора, включен в каждый исходный файл, который его использует.
Другая возможная причина заключается в том, что при использовании списка инициализаторов не включается < заголовок initializer_list >.
эта ошибка может возникать в исходных файлах Windows классических приложений, если вы определяете VC_EXTRALEAN , WIN32_LEAN_AND_MEAN или WIN32_EXTRA_LEAN . Эти макросы препроцессора исключают некоторые файлы заголовков из Windows. h и afxv_w32. h для ускорения компиляции. Просмотрите Windows. h и afxv_w32. h, чтобы получить последние сведения о том, что исключено.
Пример: отсутствует закрывающая кавычка
Эта ошибка может возникать, если отсутствует закрывающая кавычка после строковой константы. Это простой способ запутывания компилятора. Обратите внимание, что пропущенная закрывающая кавычка может быть в нескольких строках перед сообщаемым расположением ошибки.
Пример. Использование итератора вне области действия цикла
Эта ошибка может возникать, если объявить переменную-итератор в for цикле, а затем попробовать использовать эту переменную итератора вне области for цикла. Компилятор включает параметр компилятора /Zc: forScope по умолчанию. Дополнительные сведения см. в разделе Поддержка итераторов отладки .
Пример: объявление удаленного препроцессора
Эта ошибка может возникать, если вы ссылаетесь на функцию или переменную, которая находится в коде, скомпилированном по условию, который не компилируется для текущей конфигурации. Это также может произойти при вызове функции в файле заголовка, который в настоящее время не поддерживается в среде сборки. Если определенные переменные или функции доступны только при определении конкретного макроса препроцессора, убедитесь, что код, вызывающий эти функции, может быть скомпилирован только при определении одного и того же макроса препроцессора. Эту ошибку легко выявить в интегрированной среде разработки, так как объявление функции недоступно, если требуемые макросы препроцессора не определены для текущей конфигурации сборки.
Это пример кода, который работает при сборке в отладке, но не в розницу:
Пример: сбой выведения типа C++/CLI
Эта ошибка может возникать при вызове универсальной функции, если аргумент предполагаемого типа не может быть выведен из используемых параметров. Дополнительные сведения см. в разделе универсальные функции (C++/CLI).
Пример: параметры атрибута C++/CLI
эта ошибка также может быть вызвана работой по согласованности компилятора, выполненной для Visual Studio 2005: проверка параметров для Visual C++ных атрибутов.
Добрый вечер, пишу первую программу на C++, пишу в VS Express 2013, ошибка сборки: идентификатор cout не определен. Возможно дело в том, что учусь по старой книге, исправьте пожалуйста ошибку и объясните. Скриншот прилагается.
Cout - не определён, cin -не определён
// Программа для преобразования // Градусов Цельсия в Форенгейт // Fahrenheit = NCelsius *.
Идентификатор не найден/идентификатор не определен
Visual Studio ругается на 83, 127, 193 строки - "Идентификатор "Expon" не найден/не определен".
cooller_94, правильно)) ошибся
cooller_94, правильно)) ошибся
Следующая ошибка: Отсутствует спецификатор типа - предполагается int. C++ не поддерживает int по умолчанию
И возьмите другую книгу.
И возьмите другую книгу.
Во-первых, вставляйте исходники текстом.
Во-вторых, по-русски внизу написано, что у функци main уже есть тело.
Во-первых, вставляйте исходники текстом.
Во-вторых, по-русски внизу написано, что у функци main уже есть тело.
Спасибо Вам, и всем отвечающим, все получилось. Как же мне теперь запустить мою программу/увидеть что выводится на экран? Был создан файл ConsoleApplication3.exe но при открытии он мне ничего не показывает, открывается и закрывается сразу же.
Извините, вы переходили по этой ссылке? Разрешение скринов настолько мало, что текст не читаем, предложите пожалуйста альтернативу.
Добавлено через 4 минуты
Быть может нужно добавить что то, чтобы программа закрывалась только при нажатии на клавишу, из "опыта" в Pascal.
Требуется идентификатор (идентификатор с не определён)
Не могу понять в чём ошибка данного записи.Пожалуйста, объясните. vector <pair<int, int>> STACK;.
Идентификатор не определен
void __fastcall String(int x, int y, DWORD Color, DWORD Style, const char *Format, . ) < .
Идентификатор не определен
Писали ее на microsoft visual studio2013. выдает 7 ошибок на 74, 125, 136, 149, 159, 170 и 177 и.
Пример текстов ошибок:
- Для компилятора Visual Studio: error C2065: 'cout' : undeclared identifier
- Для компилятора GCC: 'cout' undeclared (first use in this function)
Решение
Чаще всего они приходят из-за того, что забывают включить заголовочный файл, содержащий объявление функции, например, эта программа выдаст ошибку «необъявленный идентификатор»:
Отсутствует заголовок
Если вы написали заголовок и включили его правильно, заголовок может содержать неправильный включить охрану .
Переменная с ошибкой
Другой распространенный источник ошибки новичка возникает, когда вы неправильно написали переменную:
Неправильный объем
Например, этот код выдаст ошибку, потому что вам нужно использовать std::string :
Использовать до объявления
Или добавить декларацию g до f :
stdafx.h не сверху (специфично для VS)
Не стесняйтесь редактировать этот ответ.
Другие решения
Рассмотрим похожую ситуацию в разговоре. Представьте, что ваш друг говорит вам: «Боб идет на ужин», а ты не представляешь, кто такой Боб. Вы будете в замешательстве, верно? Твой друг должен был сказать: «У меня есть коллега по работе по имени Боб. Боб подходит к обеду». Теперь Боб объявлен, и вы знаете, о ком говорит ваш друг.
Компилятор выдает ошибку «необъявленный идентификатор», когда вы пытаетесь использовать какой-то идентификатор (который будет именем функции, переменной, класса и т. Д.), И компилятор не видит объявления для него. То есть компилятор понятия не имеет, о чем вы говорите, потому что раньше его не видел.
Если вы получаете такую ошибку в 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 два разных имени, одно из которых было объявлено, а другое не объявлено, но используется в теле основного
Другая возможная ситуация: доступ к родительскому элементу (классу шаблона) в классе шаблона.
Это похоже на использование функции без ее объявления. заголовочный файл будет содержать
функция printf (). Включите заголовочный файл в вашу программу, это решение для этого.
Некоторые пользовательские функции могут также вызывать ошибки, если они не были объявлены перед использованием. Если
это используется во всем мире без проб.
В большинстве случаев, если вы уверены, что импортировали данную библиотеку, Visual Studio поможет вам с IntelliSense.
Вот что сработало для меня:
Читайте также: