Ketler 0 / 0 / 0 Регистрация: 02.07.2011 Сообщений: 15 |
||||
1 |
||||
13.10.2011, 00:01. Показов 28650. Ответов 14 Метки нет (Все метки)
Задан исходный код лабораторной работы по программированию. Нужно модифицировать код по определенным правилам (в зависимости от варианта). Но при попытке скомпилировать в
__________________
0 |
Mut 5 / 5 / 0 Регистрация: 12.10.2011 Сообщений: 46 |
||||||||
13.10.2011, 00:10 |
2 |
|||||||
исправь
на
0 |
Chelioss 186 / 186 / 21 Регистрация: 08.01.2011 Сообщений: 1,139 |
||||
13.10.2011, 00:13 |
3 |
|||
Вот это
писать не надо.
0 |
Net_Wanderer 237 / 210 / 29 Регистрация: 08.06.2011 Сообщений: 467 |
||||
13.10.2011, 00:18 |
4 |
|||
и
0 |
Mut 5 / 5 / 0 Регистрация: 12.10.2011 Сообщений: 46 |
||||||||
13.10.2011, 00:19 |
5 |
|||||||
моя студия без этого
ругается в стиле
0 |
186 / 186 / 21 Регистрация: 08.01.2011 Сообщений: 1,139 |
|
13.10.2011, 00:22 |
6 |
моя студия без этого Значит у вас что-то не так сделано.
0 |
237 / 210 / 29 Регистрация: 08.06.2011 Сообщений: 467 |
|
13.10.2011, 00:23 |
7 |
Значит у вас что-то не так сделано. нужно создать «Пустой проект» а не консольный
0 |
5038 / 2617 / 241 Регистрация: 07.10.2009 Сообщений: 4,310 Записей в блоге: 1 |
|
14.10.2011, 10:42 |
8 |
нужно создать «Пустой проект» а не консольный Достаточно будет выключить опцию использования предкомпилируемых заголовков.
0 |
gooseim 516 / 420 / 92 Регистрация: 23.09.2010 Сообщений: 1,165 |
||||
14.10.2011, 13:43 |
9 |
|||
Лучше
прописать в stdafx.h и из cpp убрать
0 |
Заблокирован |
||||||||
14.10.2011, 15:20 |
10 |
|||||||
Ketler, 1-й подводный камень для успешной компиляции в 2010 студии состоит в том что в ваше программе использован старый стиль заголовков
#include <iostream.h> Как сказал
Но также в вашем коде операторы ввода вывода идут без std::! Добавлено через 4 минуты
void main() — это тоже не кашерно для С++, странно что никто ваше внимание не это не обратил!
1 |
85 / 9 / 1 Регистрация: 05.04.2010 Сообщений: 143 |
|
14.10.2011, 15:25 |
11 |
«void main()
0 |
Mut 5 / 5 / 0 Регистрация: 12.10.2011 Сообщений: 46 |
||||||||
14.10.2011, 15:29 |
12 |
|||||||
можно не писать, если подключено пространство имен std
1 |
Заблокирован |
|
14.10.2011, 18:20 |
13 |
Mut,
можно не писать, если подключено пространство имен std — посмотрите скрин 2008 студии и убедитесь в обратном… Миниатюры
0 |
1080 / 1006 / 106 Регистрация: 28.02.2010 Сообщений: 2,889 |
|
14.10.2011, 18:22 |
14 |
-=ЮрА=-, не usig, а usi n g.
0 |
Заблокирован |
|
14.10.2011, 18:40 |
15 |
не usig, а using. — всё увидел, на сим для себя тоже пользу извлёк уйду от докучливых std::
0 |
Когда программирую на C++
в Visual Studio
, появляется ошибка в операторах сout
и cin
. Компилятор пишет, что эти операторы не объявлены (undeclared identifier). Подскажите, пожалуйста, что делать?
Добавлено.
Все равно ничего не получается
#include <iostream>
#include "stdafx.h"
#include <cmath>
using namespace std;
int main(){
//объявление переменной:
double V,T,alpha;
//грави постоянная:
const double g=9.8;
//Ввод параметров:
cout<<"V = ";-здесь выводит ошибку
cin>>V;-и здесь
cout<<"T = ";
cin >>T;
alpha = asin(g*T/2*V);
cout<<"Значение угла альфа равно = "<<alpha;
return 0;
}
задан 27 сен 2011 в 18:30
3
Поменяй местами #include <iostream>
и #include "stdafx.h"
("stdafx.h"
должно стоять первым).
angry
8,63717 золотых знаков72 серебряных знака180 бронзовых знаков
ответ дан 29 сен 2011 в 10:50
Во-первых, надо было приводить версию среды, т.к. в Студии 2010 работает вполне нормально. В более старых версиях надо читать внимательно сообщения построения. Так, там наверняка должно быть сообщение типа «iostream: файл пропущен при поиске файла предкомпилированных заголовков», а именно — «stdafx.h». Поставьте #include "stdafx.h"
в САМОМ НАЧАЛЕ, и да будет Вам счастье.
ответ дан 29 сен 2011 в 18:56
3JIoi_Hy63JIoi_Hy6
8926 серебряных знаков13 бронзовых знаков
Для правильной работы вам надо:
- Подключить библиотеку
iostream
. - Воспользоваться конструкцией
using namespace std
для разрешения области видимости.
Пример кода:
#include <iostream>
using namespace std;
int main() {
cout << "Hello std!" << endl;
return 0;
}
ответ дан 27 сен 2011 в 18:58
Nicolas Chabanovsky♦Nicolas Chabanovsky
50.6k80 золотых знаков257 серебряных знаков493 бронзовых знака
1
// Требуется создать в VS пустой проект
#include "stdafx.h"
#include "iostream"
#include <cmath>
#include <conio.h>
using namespace std;
int main(){
setlocale(0,"russian");
//объявление переменной:
double V,T,alpha;
//грави постоянная:
const double g=9.8;
//Ввод параметров:
cout << "V="; //-здесь выводит ошибку
cin >> V; //-и здесь
cout << "T=";
cin >> T;
alpha = asin(g*T/2*V);
cout << "Значение угла альфа равно = "<<alpha;
_getch();
}
Но лучше все это дело через std::cin и std::cout
ответ дан 29 сен 2011 в 8:11
johnfelixjohnfelix
1191 серебряный знак11 бронзовых знаков
2
Содержание
- Ошибка компилятора C2065
- Идентификатор является необъявленным
- Пример: идентификатор с ошибками
- Пример. Использование несеченного идентификатора
- Пример: предварительно скомпилированные заголовки не первый
- Пример: отсутствующий файл заголовка
- Пример: отсутствует закрывающая цитата
- Пример. Использование итератора вне для области цикла
- Пример: объявление препроцессора удалено
- Пример: Сбой вычета типа C++/CLI
- Пример. Параметры атрибута C++/CLI
- Error C2065: cout: необъявленный идентификатор
- Ошибка C2065: ‘cout’: необъявленный идентификатор
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- Ответ 19
- Ответ 20
- Ответ 21
- Ответ 22
- Ответ 23
- Ответ 24
Ошибка компилятора C2065
Компилятор не может найти объявление для идентификатора. Эта ошибка имеет несколько возможных причин. Наиболее распространенные причины 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 .
Пример: идентификатор с ошибками
Эта ошибка обычно возникает, если имя идентификатора написано с ошибкой или идентификатор использует неправильные прописные и строчные буквы. Имя в объявлении должно точно соответствовать используемому имени.
Пример. Использование несеченного идентификатора
Эта ошибка может возникнуть, если область действия идентификатора не задана должным образом. Если при использовании cout отображается C2065 , причина заключается в проблеме области. Если функции и операторы стандартной библиотеки C++ не полностью определяются пространством имен или вы не включили std пространство имен в текущую using область с помощью директивы , компилятор не сможет найти их. Чтобы устранить эту проблему, необходимо либо полностью указать имена идентификаторов, либо указать пространство имен с помощью директивы using .
В этом примере не удается выполнить компиляцию, так как cout и endl определены в std пространстве имен:
Идентификаторы, объявленные в типах class , struct или enum class , также должны быть квалифицированы по имени включающей области при их использовании за пределами этой области.
Пример: предварительно скомпилированные заголовки не первый
Эта ошибка может возникнуть, если перед файлом предварительно скомпилированного файла заголовка были помещены директивы препроцессора, например #include , #define или #pragma . #include Если исходный файл использует предварительно скомпилированный файл заголовка (то есть, если он компилируется с помощью /Yu параметра компилятора), то все директивы препроцессора, предшествующие предварительно скомпилированному файлу заголовка, игнорируются.
В этом примере не удается выполнить компиляцию, так как cout и endl определены в заголовке , который игнорируется, так как он включен перед предварительно скомпилированным файлом заголовка. Чтобы выполнить сборку этого примера, создайте все три файла, затем скомпилируйте pch.h (в некоторых версиях Visual Studio используется stdafx.cpp ), а затем скомпилируйте C2065_pch.cpp .
Исходный pch.h файл или stdafx.h :
Исходный файл C2065_pch.cpp :
Чтобы устранить эту проблему, добавьте #include в файл предкомпилированного заголовка или переместите его после включения предварительно скомпилированного файла заголовка в исходный файл.
Пример: отсутствующий файл заголовка
Ошибка может возникнуть, если вы не включили файл заголовка, в который объявляется идентификатор. Убедитесь, что файл, содержащий объявление идентификатора, включен в каждый исходный файл, в котором он используется.
Другой возможной причиной является использование списка инициализаторов без включения заголовка .
Эта ошибка может возникнуть в исходных файлах классического приложения Для 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++.
Источник
Error C2065: cout: необъявленный идентификатор
Объясните мне неразумному. . еще раз.. .
Занимаюсь (пытаюсь) по книге «Освой самостоятельно С++ за 21 день». Но пытаюсь освоить через в Microsoft Visual Studio 2012. Итак код:
#include
int main()
<
int x = 5;
int y = 7;
std::cout ——Построение начато: проект: Urok1_Zad, Конфигурация: Debug Win32 ——
1> Исходный код. 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::endl вместо endl
либо объявите явно использование пространства имен std в своей программе:
#include
using namespace std;
int main() <
int x = 5;
int y = 7;
cout Остальные ответы
Источник
Ошибка C2065: ‘cout’: необъявленный идентификатор
Я работаю над частью «драйвера» моего назначения программирования, и я продолжаю получать эту абсурдную ошибку:
ошибка C2065: ‘cout’: необъявленный идентификатор
Я даже пытался использовать std:: cout, но я получаю еще одну ошибку, которая говорит: IntelliSense: пространство имен «std» не имеет члена «cout» , когда у меня есть объявленный с использованием пространства имен std, включая iostream +, я даже пытался использовать ostream
Я знаю, что это стандартный вопрос о нобе, но это меня насторожило, и я новичок (это означает: я запрограммировал раньше. )
Я использую Visual Studio 2010 и запускаю Windows 7. Все файлы .h имеют «использование пространства имен std» и включают iostream и ostream.
ОТВЕТЫ
Ответ 1
В Visual Studio вы должны #include «stdafx.h» и быть первым включением файла cpp. Например:
Это не будет работать.
Ответ 2
напишите этот код, он отлично работает.
Ответ 3
У меня была такая же проблема на Visual Studio С++ 2010. Это легко исправить. Над функцией main() просто замените стандартные строки с этим ниже, но с символом фунта перед включенными.
Ответ 4
include «stdafx.h» в порядке
Но вы не можете использовать cout , если вы не включили using namespace std
Если вы не включили пространство имен std, вам нужно написать std::cout вместо простого cout
Ответ 5
Я видел, что если вы используете
тогда вы получите эту проблему.
Если вы используете
(уведомление — без .h)
то вы не получите проблему, о которой вы упомянули.
Ответ 6
Если вы начали проект, требующий строки #include «stdafx.h» , поставьте его первым.
Ответ 7
Нижеприведенный код компилируется и запускается правильно для меня, используя gcc. Попробуйте скопировать/вставить это и посмотреть, работает ли он.
Ответ 8
Если единственным файлом, который вы включаете, является iostream, и он все еще говорит undefined, то, возможно, iostream не содержит того, что он должен был. Возможно ли, что у вас есть пустой файл, совпадающий по имени «iostream» в вашем проекте?
Ответ 9
Я видел похожие вещи, когда я использовал расширение .c файла с кодом С++. Кроме этого, я должен согласиться со всеми о багги установке. Это работает, если вы попытаетесь скомпилировать проект с более ранней версией VS? Попробуйте VС++ Express 2008. Его бесплатно на msdn.
Ответ 10
Такое глупое решение в моем случае:
Выше было указано в качестве примера a, когда я изменил его, чтобы он был похож на пример b ниже.
Мой код составлен как шарм. Попробуйте, гарантированно сработает.
Ответ 11
прежде чем вы начнете эту программу, избавитесь от всего кода и сделайте простой мир привет внутри основного. Включать только iostream и использовать пространство имен std;. Постепенно добавьте его, чтобы найти свою проблему.
Ответ 12
У меня есть VS2010, Beta 1 и Beta 2 (один на моей рабочей машине и один на дому), и я использовал std множество без проблем. Попробуйте ввести:
И посмотрите, дает ли Intellisense что-нибудь. Если это дает вам обычный материал ( abort , abs , acos и т.д.), За исключением cout , ну тогда это довольно головоломка. Определенно посмотрите на ваши заголовки С++ в этом случае.
Помимо этого, я бы просто добавил, чтобы убедиться, что вы используете обычный пустой проект (не CLR, где Intellisense поврежден), и что вы на самом деле пытались построить проект хотя бы один раз. Как я уже упоминал в комментарии, VS2010 анализирует файлы после добавления include ; возможно, что что-то застряло в парсере, и он не сразу «нашел» cout . (В этом случае попробуйте перезапустить VS, возможно?)
Ответ 13
У меня была такая же проблема при запуске проекта ms С++ 2010 с нуля — я удалил все файлы заголовков, сгенерированные с помощью ms, но использовал:
Мне пришлось включить stdafx.h , поскольку это вызвало ошибку, в которой он не был.
Ответ 14
из вашего .cpp файла, создайте файл заголовка и поместите его в файл .h. Затем добавьте
в верхней части вашего .cpp-кода. Затем запустите его снова.
Ответ 15
Вы уверены, что он компилируется как С++? Проверьте имя файла (он должен заканчиваться на .cpp ). Проверьте настройки проекта.
Нет ничего плохого в вашей программе, а cout находится в namespace std . Ваша установка VS 2010 Beta 2 является дефектной, и я не думаю, что это просто ваша установка.
Я не думаю, что VS 2010 готов к С++. Стандартная программа «Hello, World» не работала на бета-версии 1. Я просто попытался создать тестовое консольное приложение Win32, а сгенерированный файл test.cpp не имел функции main() .
У меня действительно очень плохое чувство о VS 2010.
Ответ 16
Попробуй, это сработает. Я проверил его в Windows XP, Visual Studio 2010 Express.
Ответ 17
Когда вы создали свой проект, вы не установили правильно использовать предварительно скомпилированные заголовки. Измените его в свойствах → C/С++ → предварительно скомпилированные заголовки.
Ответ 18
В Visual Studio используйте весь ваш фильтр заголовка ниже «stdafx.h».
Ответ 19
Включите библиотеку std, вставив следующую строку вверху вашего кода:
Ответ 20
обычно сохраняется в папке C:Program FilesMicrosoft Visual Studio 8VCinclude. Сначала проверьте, все ли он там. Затем выберите «Инструменты + варианты», «Проекты и решения», «Каталоги VС++», выберите «Включить файлы» в поле «Показать каталоги для» и дважды проверьте, что включение (VCInstallDir) включено в список.
Ответ 21
Я столкнулся с этой ошибкой после того, как установил vs 2010 и просто пытался получить почти идентичную программу для работы.
Я уже делал кодировку ваниль C в коробках в стиле unix, решил, что немного поиграю с этим.
Первая программа, которую я пробовал, была:
Большая вещь, чтобы заметить здесь. если вы все сделали C-кодирование,
Выглядит странно. это должно быть:
В моем случае я просто изменил программу на:
И он отлично работал.
Примечание. Используйте CTRL + F5, чтобы окно консоли закрывалось, чтобы вы могли видеть результаты.
Ответ 22
Просто используйте printf !
Включите stdio.h в заголовочный файл stdafx.h для printf .
Ответ 23
Я пришел сюда, потому что у меня была такая же проблема, но когда я сделал #include «stdafx.h» , он сказал, что не нашел этот файл.
Что для меня было трюком: #include .
Я использую Microsoft Visual Studio 2008.
Это то, что вы можете использовать тогда, в том числе. ‘count’: Ссылка
Ответ 24
Это был компилятор — теперь я использую Eclipse Galileo, и программа работает как чудо
Источник
- Remove From My Forums
-
Question
-
Hi, I am very new to programming, and I am having trouble getting cout, and cin to work. I keeps coming up as:
error C2065: ‘cin’ : undeclared identifier
I know it sounds ridiculus to have problems with cin and cout, and I ahev sucsessfully used them before. I think I have all the proper header files for the basic command line app, and I can’t see anything wrong with my syntax. I checked my c++ book and my code looks like it should compile.
Please help.
Here is a sample of 1 of 13 cout and cin errors:
Code Snippet
cout <<«Are you done or would you like to restart?»;
Answers
-
Insure that you have #included <iostream>
Also, cout and cin are inside of the std:: namespace. Because you are still new, I would recommend just using the following code until you start learning about namespaces.
Code Snippet
#include <iostream>
using namespace std;//You should be able to use cout and cin from here…
Hope this helps!
-
In contemporary C++ compilers, iostreams are in the std namespace.
First , ensure that you have
#include <iostream> // no .h
Then choose one of these alternatives:
Code Snippet
std::cout <<«Are you done or would you like to restart?» << std::endl;
std::cin >> x;
Code Snippet
using namespace std; // for cin, cout, endl, etc.
cout <<«Are you done or would you like to restart?» << endl;Code Snippet
using std::cout;
using std::cin;
using std::endl;
cout <<«Are you done or would you like to restart?»<< endl;
— Wayne
-
HI,
If you are using visual studio for creating a c++ application.
You need to include #include < iostream >
and then add the following statement also:
using namespace std;
then use the cin and cout normally
otherwise use the cin and cout with the namespace std like std::cin and std::cout then it will surely work.
-
Only things to remember that from VC6.0 onward compiler didn’t understand this .h header File format So instead of <iostream.h> you have to include <iostream> .Now use above mention suggestion and it will work.
Thanx
- Forum
- Beginners
- std::cin and std::cout isn’t working
std::cin and std::cout isn’t working
Hello all
the std::cin and std::cout aren’t working for me correctly
|
|
what could the reason be?
Thanks
What is line 7 std::string
? It looks as though it should not be there at all.
it also isn’t working without string
Could you please give a more precise description than «it isn’t working». What is the actual problem?
when I got to debug it says error — I am using visual studio 2010.
the thing I got is:
1>—— Build started: Project: Testing, Configuration: Debug Win32 ——
1> Testing.cpp
1>Testing.cpp(2): warning C4627: ‘#include <iostream>’: skipped when looking for precompiled header use
1> Add directive to ‘StdAfx.h’ or rebuild precompiled header
1>Testing.cpp(8): error C2039: ‘cout’ : is not a member of ‘std’
1>Testing.cpp(8): error C2065: ‘cout’ : undeclared identifier
1>Testing.cpp(10): error C2039: ‘cin’ : is not a member of ‘std’
1>Testing.cpp(10): error C2065: ‘cin’ : undeclared identifier
1>Testing.cpp(15): error C2039: ‘cout’ : is not a member of ‘std’
1>Testing.cpp(15): error C2065: ‘cout’ : undeclared identifier
1>Testing.cpp(16): error C2039: ‘cout’ : is not a member of ‘std’
1>Testing.cpp(16): error C2065: ‘cout’ : undeclared identifier
1>Testing.cpp(17): error C2039: ‘cout’ : is not a member of ‘std’
1>Testing.cpp(17): error C2065: ‘cout’ : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
For some reason the iostream library which contains the definitions for std::cin and std::cout is not being included. That is your prolbem.
how do I include it?
try removing the spaces before the «#include <iostream>»
first line of the thing you posted
#include <iostream>
I suspect it is something to do with #include "stdafx.h"
whuich isn’t standard c++, rather it is specific to some compilers.
Beyond that, sorry, I can’t help, though I’m sure someone else should be able to.
If you’re using precompiled headers, #include "stdafx.h"
must come before any other includes.
You set up your project to use precompiled headers which is what stdafx.h is for.
1. Create a new project.
2. In the first dialog box select console application.
3. In the next dialog box do not click Finish to accept the current settings. Instead click Next.
4. In the following dialog box deselect Precompiled header, then select Empty project. Make sure you deselect Precompiled header before selecting Empty project, otherwise Precompiled header will be still selected but dimmed out.
5. Now click Ok.
6. Add a new cpp file to your new project and copy and paste in your old code.
7. Remove the lines:
#include "stdafx.h"
std::string
thanx, now working
Topic archived. No new replies allowed.
In this tutorial, we will learn about the compiler error C2065 in C++. We look at possible reasons for this error and their corresponding solutions.
The error message displayed for C2065 is:
‘identifier‘: undeclared identifier
This means that there is some issue with the code and that the compiler is unable to compile the code until this is fixed.
Compiler Error C2065 in C++
Identifiers are the names we give variables or functions in our C++ program. We get the error C2065 when we use such identifiers without first declaring them. Sometimes we may think that we have declared these identifiers, but there is a chance that we have not done so properly. I have shown a simple example below where we get the C2065 error message while compiling the code.
int main() { // uncommenting the following line removes the error // int i; i = 5; return 0; }
This is because we are using the variable ‘i’ without first declaring it.
The following sections have some common reasons and solutions for the C2065 error message.
Identifier is misspelt
This is a very common mistake that we all make. Sometimes we type the identifier wrong which results in the C2065 error message. Here are a few examples.
int main() { int DOB; int students[50]; dob = 32; // we declared 'DOB' but used 'dob' student[0] = 437; // we declared 'students' but used 'student' return 0; }
Identifier is unscoped
We must only use identifiers that are properly scoped. In the example given below, we declare ‘a’ inside the ‘if‘ statement. As a result, its scope is restricted to that ‘if‘ block.
int main() { int n = 5; if (n > 3) { int a = 3; a++; } // a cannot be used outside its scope a = 5; return 0; }
We must also bring library functions and operators into the current scope. A very common example of this is the ‘cout‘ statement which is defined in the ‘std‘ namespace. The following code results in the C2065 error.
#include <iostream> int main() { cout << "Hello World"; return 0; }
This error can be removed by either of the following methods.
#include <iostream> int main() { // we fully qualify the identifier using the // reuired namespace std::cout << "Hello World"; return 0; }
or
#include <iostream> // we bring the std namespace into the scope using namespace std; int main() { cout << "Hello World"; return 0; }
Precompiled header is not first
Let us say we have a precompiled header file. All other preprocessor directives must be put after the #include statement of the precompiled header. Thus, the following code having the precompiled header “pch.h” results in a C2065 error.
#include <iostream> #include "pch.h" using namespace std; int main() { cout << "Hello World"; return 0; }
We can fix this by moving the including of pch.h to the top as shown below.
#include "pch.h" #include <iostream> using namespace std; int main() { cout << "Hello World"; return 0; }
The necessary header file is not included
We need to include header files if we are to use certain identifiers. We see the C2065 error message in the following code as we need to include the string header to use objects of string type.
// Uncomment the following line for the code to work // #include <string> using namespace std; int main() { string s; return 0; }
The closing quote is missing
We need to properly close quotes for the code to work correctly. In the example given below, the C2065 error shows up because the compiler does not properly recognise ‘d’.
int main() { // we need a closing quote (") after 'dog' in the following line char c[] = "dog, d[] = "cat"; d[0] = 'b'; return 0; }
Conclusion
In this tutorial, we looked at some possible reasons for the compiler error C2065 in C++. We also learnt about possible solutions. We may obtain this message for other reasons. Here is the link to Microsoft’s documentation for the C2065 error in Visual Studio 2019.
На чтение 7 мин. Опубликовано 15.12.2019
Что такое необъявленные ошибки идентификатора? Каковы общие причины и как их исправить?
Пример текстов ошибок:
- Для компилятора Visual Studio: error C2065: ‘cout’ : undeclared identifier
- Для компилятора GCC: ‘cout’ undeclared (first use in this function)
Содержание
- Решение
- Отсутствует заголовок
- Переменная с ошибкой
- Неправильный объем
- Использовать до объявления
- stdafx.h не сверху (специфично для VS)
- Другие решения
Решение
Чаще всего они приходят из-за того, что забывают включить заголовочный файл, содержащий объявление функции, например, эта программа выдаст ошибку «необъявленный идентификатор»:
Отсутствует заголовок
Чтобы это исправить, мы должны включить заголовок:
Если вы написали заголовок и включили его правильно, заголовок может содержать неправильный включить охрану .
Переменная с ошибкой
Другой распространенный источник ошибки новичка возникает, когда вы неправильно написали переменную:
Неправильный объем
Например, этот код выдаст ошибку, потому что вам нужно использовать 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 но компилятор не видит, где было объявлено имя, и, соответственно, не знает, что это значит.
Любое имя, используемое в программе, должно быть объявлено до ее использования. Компилятор должен знать, что обозначает имя.
В этом конкретном случае компилятор не видит объявление имени 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()
<
int x = 5;
int y = 7;
std::cout ——Построение начато: проект: Urok1_Zad, Конфигурация: Debug Win32 ——
1> Исходный код. 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() <
int x = 5;
int y = 7;
cout Остальные ответы
Что такое необъявленные ошибки идентификатора? Каковы общие причины и как их исправить?
Пример текстов ошибок:
- Для компилятора Visual Studio:
error C2065: 'cout' : undeclared identifier
- Для компилятора GCC:
'cout' undeclared (first use in this function)
39
Решение
Чаще всего они приходят из-за того, что забывают включить заголовочный файл, содержащий объявление функции, например, эта программа выдаст ошибку «необъявленный идентификатор»:
Отсутствует заголовок
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Чтобы это исправить, мы должны включить заголовок:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Если вы написали заголовок и включили его правильно, заголовок может содержать неправильный включить охрану.
Чтобы узнать больше, смотрите http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
Переменная с ошибкой
Другой распространенный источник ошибки новичка возникает, когда вы неправильно написали переменную:
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
Неправильный объем
Например, этот код выдаст ошибку, потому что вам нужно использовать std::string
:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
Использовать до объявления
void f() { g(); }
void g() { }
g
не был объявлен до его первого использования. Чтобы это исправить, либо переместите определение g
до f
:
void g() { }
void f() { g(); }
Или добавить декларацию g
до f
:
void g(); // declaration
void f() { g(); }
void g() { } // definition
stdafx.h не сверху (специфично для VS)
Это зависит от Visual Studio. В VS нужно добавить #include "stdafx.h"
перед любым кодом. Код до того, как он игнорируется компилятором, так что если у вас есть это:
#include <iostream>
#include "stdafx.h"
#include <iostream>
будет проигнорировано Вам нужно переместить его ниже:
#include "stdafx.h"#include <iostream>
Не стесняйтесь редактировать этот ответ.
54
Другие решения
Рассмотрим похожую ситуацию в разговоре. Представьте, что ваш друг говорит вам: «Боб идет на ужин», а ты не представляешь, кто такой Боб. Вы будете в замешательстве, верно? Твой друг должен был сказать: «У меня есть коллега по работе по имени Боб. Боб подходит к обеду». Теперь Боб объявлен, и вы знаете, о ком говорит ваш друг.
Компилятор выдает ошибку «необъявленный идентификатор», когда вы пытаетесь использовать какой-то идентификатор (который будет именем функции, переменной, класса и т. Д.), И компилятор не видит объявления для него. То есть компилятор понятия не имеет, о чем вы говорите, потому что раньше его не видел.
Если вы получаете такую ошибку в C или C ++, это означает, что вы не сказали компилятору о том, что вы пытаетесь использовать. Объявления часто встречаются в заголовочных файлах, поэтому, скорее всего, это означает, что вы не включили соответствующий заголовок. Конечно, может случиться так, что вы просто не помните, чтобы объявить сущность вообще.
Некоторые компиляторы выдают более конкретные ошибки в зависимости от контекста. Например, пытаясь скомпилировать X x;
где тип X
не был объявлен с Clang скажет вам «неизвестное имя типа X
«. Это гораздо полезнее, потому что вы знаете, что он пытается интерпретировать X
как тип. Тем не менее, если у вас есть int x = y;
, где y
еще не объявлено, он скажет вам «использование необъявленного идентификатора y
«потому что есть некоторая двусмысленность в том, что именно y
может представлять.
12
У меня была такая же проблема с пользовательским классом, который был определен в пространстве имен. Я пытался использовать класс без пространства имен, вызывая ошибку компилятора «идентификатор» MyClass «не определен».
Добавление
using namespace <MyNamespace>
или используя класс, как
MyNamespace::MyClass myClass;
решил проблему.
5
В C и C ++ все имена должны быть объявлены перед использованием. Если вы попытаетесь использовать имя переменной или функции, которая не была объявлена, вы получите ошибку «необъявленный идентификатор».
Однако функции — это особый случай в C (и только в C), в котором вам не нужно сначала объявлять их. Компилятор C будет предполагать, что функция существует с числом и типом аргументов, как в вызове. Если фактическое определение функции не совпадает, вы получите еще одну ошибку. Этот особый случай для функций не существует в C ++.
Вы исправляете ошибки такого рода, проверяя, что функции и переменные объявлены до их использования. В случае printf
вам нужно включить заголовочный файл <stdio.h>
(или же <cstdio>
в C ++).
Для стандартных функций я рекомендую вам проверить, например, этот справочный сайт, и найдите функции, которые вы хотите использовать. Документация для каждой функции говорит вам, какой заголовочный файл вам нужен.
4
Эти сообщения об ошибках
1.For the Visual Studio compiler: error C2065: 'printf' : undeclared identifier
2.For the GCC compiler: `printf' undeclared (first use in this function)
означает, что вы используете имя printf
но компилятор не видит, где было объявлено имя, и, соответственно, не знает, что это значит.
Любое имя, используемое в программе, должно быть объявлено до ее использования. Компилятор должен знать, что обозначает имя.
В этом конкретном случае компилятор не видит объявление имени printf
, Как мы знаем (но не компилятор) это имя стандартной функции C, объявленной в заголовке <stdio.h>
в C или в заголовке <cstdio>
в C ++ и размещены в стандарте (std::
) и глобальный (::
) (не обязательно) пространства имен.
Поэтому, прежде чем использовать эту функцию, мы должны предоставить объявление ее имени компилятору путем включения соответствующих заголовков.
Например
C:
#include <stdio.h>
int main( void )
{
printf( "Hello Worldn" );
}
C ++:
#include <cstdio>
int main()
{
std::printf( "Hello Worldn" );
// or printf( "Hello Worldn" );
// or ::printf( "Hello Worldn" );
}
Иногда причиной такой ошибки является простая опечатка. Например, давайте предположим, что вы определили функцию PrintHello
void PrintHello()
{
std::printf( "Hello Worldn" );
}
но в основном вы сделали опечатку и вместо PrintHello
ты напечатал printHello
с строчной буквы «р».
#include <cstdio>
void PrintHello()
{
std::printf( "Hello Worldn" );
}
int main()
{
printHello();
}
В этом случае компилятор выдаст такую ошибку, потому что он не видит объявление имени printHello
, PrintHello
а также printHello
два разных имени, одно из которых было объявлено, а другое не объявлено, но используется в теле основного
3
Это похоже на использование функции без ее объявления. заголовочный файл будет содержать
функция printf (). Включите заголовочный файл в вашу программу, это решение для этого.
Некоторые пользовательские функции могут также вызывать ошибки, если они не были объявлены перед использованием. Если
это используется во всем мире без проб.
0
В большинстве случаев, если вы уверены, что импортировали данную библиотеку, Visual Studio поможет вам с IntelliSense.
Вот что сработало для меня:
Удостоверься что #include "stdafx.h"
объявляется первым, то есть вверху всех ваших включений.
0