ошибка C2065: 'cout': необъявленный идентификатор

Я работаю над «драйверной» частью моего задания по программированию и продолжаю получать эту абсурдную ошибку:

ошибка C2065: 'cout': необъявленный идентификатор

Я даже пробовал использовать std :: cout, но получаю еще одну ошибку, которая гласит: IntelliSense: пространство имен "std" не имеет члена "cout", когда я объявил используя пространство имен std, включая iostream + я даже пытался использовать ostream

Я знаю, что это стандартный вопрос для новичков, но это поставило меня в тупик, и я новичок (имеется в виду: я программировал раньше ...)

#include <iostream>
using namespace std;

int main () {
    cout << "hey" << endl;
 return 0;
}

Я использую Visual Studio 2010 и запускаю Windows 7. Все файлы .h имеют "using namespace std" и включают iostream и ostream.


person Wallter    schedule 08.12.2009    source источник
comment
Удалите все файлы заголовков, кроме iostream, затем повторите попытку.   -  person Timo Geusch    schedule 08.12.2009
comment
Разве ваш ‹< конец не должен быть концом?   -  person RC.    schedule 08.12.2009
comment
да, извините, я изменил это, но ничего - как endl, так и использование только iostream - пробовал: используя iostream с пространством имен std, но не повезло   -  person Wallter    schedule 08.12.2009
comment
ПРИМЕЧАНИЕ: все файлы .h включают пространство имен std - и включают потоки io и o ... ‹- Если вы имеете в виду, что все файлы .h используют пространство имен std; в них вы, возможно, захотите пересмотреть ...   -  person Cogwheel    schedule 08.12.2009
comment
int main, а не int Main. И точка с запятой после тела функции не нужна.   -  person Cat Plus Plus    schedule 08.12.2009
comment
вы пробовали предложение, данное @Timo Geusch? Что тогда происходит?   -  person Ponting    schedule 08.12.2009
comment
@Ponting - да-ничего не изменилось   -  person Wallter    schedule 08.12.2009
comment
Вы пытались изменить его на int main () и вернуть значение?   -  person JonH    schedule 08.12.2009
comment
@JonH да ничего - я пробовал очистить сборку, но все равно ничего   -  person Wallter    schedule 08.12.2009
comment
хорошо .. еще одна попытка, что происходит, когда вы щелкаете правой кнопкой мыши по iostream и используете открытый файл iostream (я не помню, какой именно вариант)? Он может его открыть?   -  person Ponting    schedule 08.12.2009
comment
Какой компилятор вы используете? Можете ли вы начать новый свежий проект на новой свежей сборке компилятора. Что-то подсказывает мне, что ваши файлы повреждены или что-то установилось не так гладко. Все опубликовали действующий код на C ++, так что он должен работать :).   -  person JonH    schedule 08.12.2009
comment
Также повторно опубликуйте весь код как правку, чтобы мы могли видеть внесенные вами изменения. В противном случае мы не можем поверить, что вы избавились от этой точки с запятой после функции bob.   -  person JonH    schedule 08.12.2009
comment
Здесь все выглядит хорошо и компилируется, но я не использую vs 2010. Разве это не в бета-версии :-p. Ага, используй 2008 и проверь!   -  person JonH    schedule 08.12.2009
comment
да, я думаю, это компилятор, IDK, зачем он это делал, но я собираюсь переустановить :) Спасибо, ребята   -  person Wallter    schedule 08.12.2009
comment
Вы действительно пробовали скомпилировать это или только что увидели ошибки в Visual Studio? Я считаю, что в первый раз, когда вы запускаете проект C ++ в VS2010, он может начать сканировать все заголовки std и может сначала не идентифицировать даже базовые вещи, такие как std::cout. Но если вы попробуете построить это, должно получиться ...   -  person Dan Tao    schedule 08.12.2009
comment
Кроме того, это пустой проект или проект CLR? Я почти уверен, что Intellisense не работает в VS2010 для проектов CLR (т.е. .NET).   -  person Dan Tao    schedule 08.12.2009
comment
Intellisense не работает для C ++ / CLI, но он не должен получать никаких сообщений об ошибках, несмотря на это (только без подсказок о завершении).   -  person Pavel Minaev    schedule 08.12.2009
comment
В вашем вопросе упоминается только intellisense. Получаете ли вы также фактические ошибки компиляции?   -  person jalf    schedule 08.12.2009
comment
Джалф, в самом первом абзаце упоминается ошибка компилятора C2065.   -  person Rob Kennedy    schedule 08.12.2009
comment
Какое имя файла, который вы пытаетесь скомпилировать, включая расширение? Я обнаружил, что Visual Studio компилирует что угодно с расширением .c как файл c и .cpp с c ++ ... Звучит глупо, я знаю и, вероятно, уже предлагал.   -  person Todd Richardson    schedule 09.12.2009
comment
Я серьезно сомневаюсь, что в Visual Studio есть ошибка, связанная с cout.   -  person GManNickG    schedule 15.12.2009
comment
Это сбило меня с толку, когда я столкнулся с той же проблемой, и я начал искать объяснение в Интернете, поэтому я здесь. Я склонен думать, что компилятор сначала не понял это правильно, когда я использовал эту строку, std :: cout ‹< Привет; Но после того, как я сделал сборку и использовал ее, ошибка исчезла. Также я включил эту строку, #include ‹% iostream%› без символа «%» в stdafx.h. Пришлось использовать здесь%, поскольку браузер анализировал это как тег. Надеюсь, вы уже нашли решение! :)   -  person    schedule 21.02.2011
comment
Вы запускаете его как C, а не C ++.   -  person Lightness Races in Orbit    schedule 07.12.2012
comment
@Wallter Если есть ошибка, было бы здорово, если бы вы могли описать ошибку в своем ответе и включить ссылку на отчет об ошибке.   -  person jogojapan    schedule 17.12.2012
comment
Почему этот вопрос получил столько голосов? OOB, этот код работает, и на это нет однозначного ответа ..   -  person paulm    schedule 02.02.2015


Ответы (26)


В Visual Studio вы должны #include "stdafx.h" и быть первым включенным файлом cpp. Например:

Это не сработает.

#include <iostream>
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}




#include <iostream>
#include "stdafx.h"
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}

Это подойдет.

#include "stdafx.h"
#include <iostream>
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}

Вот отличный ответ о том, что делает заголовок stdafx.h.

person George Chondrompilas    schedule 22.10.2014
comment
Это должен быть правильный ответ, поскольку он указывает, почему код работает. Большое спасибо. - person Eliud; 24.01.2017
comment
Да, это должен быть принятый ответ. Большинство других тоже работают, но здесь это ясно сказано. @Wallter - person Konstantin A. Magg; 12.06.2017
comment
Я просто подписался, чтобы проголосовать. Это ответ, сформулированный ясно. - person Samir; 20.07.2017
comment
За исключением того, что никто не упоминает, что делает stdafx.h. - person uitty400; 10.06.2018

напишите этот код, он отлично работает ..

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
 cout<<"Hello World!";
  return 0;
}
person Hrishikesh Choudhari    schedule 21.02.2011

У меня была такая же проблема с Visual Studio C ++ 2010. Это легко исправить. Над функцией main () просто замените стандартные строки include на эти ниже, но с символом решетки перед включениями.

# include "stdafx.h"
# include <iostream>
using  namespace std;
person mee    schedule 04.07.2011

include "stdafx.h" в порядке

Но вы не можете использовать cout, если не включили using namespace std

Если вы не включили пространство имен std, вам нужно написать std::cout вместо простого cout

person Community    schedule 16.09.2013
comment
Это правильный ответ. Вам нужно использовать `using namespace std ', где находится cout. В современном C ++ все функции находятся в собственном пространстве имен. - person Hammad Khan; 14.03.2020

Я видел, что если вы используете

#include <iostream.h>

тогда вы получите проблему.

Если вы используете

#include <iostream>  

(примечание - без .h)

тогда у вас не будет проблемы, о которой вы упомянули.

person G B    schedule 10.11.2010
comment
Я видел, что если вы используете #include ‹iostream.h›, тогда у вас возникнет проблема. Если вы используете #include ‹iostream› (примечание - без .h), тогда вы не столкнетесь с проблемой, о которой вы упомянули. - person G B; 10.11.2010
comment
но почему так важно использовать include без .h? - person JavaRunner; 02.06.2013
comment
@JavaRunner: потому что файл называется iostream. Он не называется iostream.h. iostream.h не существует. Просто как тот. - person Lightness Races in Orbit; 02.10.2016

Если вы начали проект, требующий строки #include "stdafx.h", поместите ее первым.

person Jerrey    schedule 26.11.2010

Приведенный ниже код компилируется и правильно работает для меня с использованием gcc. Попробуйте скопировать / вставить это и посмотрите, работает ли это.

#include <iostream>
using namespace std;

int bob (int a) { cout << "hey" << endl; return 0; };

int main () {
    int a = 1;
    bob(a);
    return 0;
}
person Glen    schedule 08.12.2009
comment
да то же самое - Ошибка 1 ошибка C2065: 'cout': необъявленный идентификатор && IntelliSense: идентификатор cout не определен - person Wallter; 08.12.2009
comment
Работает ли std :: cout? Я мало что знаю о Visual Studio, вы уверены, что правильно настроили проект как проект C ++? Если вы откроете файл iostream, будет ли он содержать объявление cout? - person Glen; 08.12.2009
comment
Учитывая, что VS2010 все еще находится в стадии бета-тестирования, это может быть ошибкой (какую бета-версию вы используете?). Но мне трудно поверить, что что-то столь простое работает неправильно. - person Glen; 08.12.2009
comment
в проекте Ubuntu C ++; добавление этого с использованием пространства имен std; после того, как #include ‹iostream› сделал работу - спасибо - person serup; 25.10.2016

Если единственный файл, который вы включаете, - это iostream, и он по-прежнему говорит undefined, то, возможно, iostream не содержит того, что должен. Возможно ли, что в вашем проекте есть пустой файл с именем «iostream»?

person Bob Lied    schedule 08.12.2009

Я видел похожие вещи, когда использовал расширение файла .c с кодом C ++. В остальном мне пришлось бы со всеми согласиться насчет ошибок при установке. Это сработает, если вы попытаетесь скомпилировать проект с более ранней версией VS? Попробуйте VC ++ Express 2008. Бесплатно на msdn.

person goatlinks    schedule 08.12.2009
comment
Да, это был VS2010 - я установил eclipse Galileo, и программа работала отлично !!! - person Wallter; 15.12.2009

Такое глупое решение в моем случае:

// Example a
#include <iostream>    
#include "stdafx.h"

Вышеупомянутое было заказано в соответствии с примером a, когда я изменил его, чтобы он напоминал пример b ниже ...

// Example b
#include "stdafx.h"
#include <iostream>  

Мой код скомпилирован как шарм. Попробуйте, гарантированно сработает.

person Sizons    schedule 05.09.2017

У меня VS2010, Beta 1 и Beta 2 (один на моей рабочей машине, другой дома), и я использовал std много без проблем. Попробуйте ввести:

std::

И посмотрите, дает ли вам что-нибудь Intellisense. Если он дает вам обычные данные (abort, abs, acos и т. Д.), кроме cout, что ж, это вызывает большие затруднения. В таком случае обязательно загляните в заголовки C ++.

Помимо этого, я бы просто добавил, чтобы убедиться, что вы запускаете обычный пустой проект (не CLR, где Intellisense не работает), и что вы действительно пытались построить проект хотя бы один раз. . Как я уже упоминал в комментарии, VS2010 анализирует файлы после того, как вы добавили include; могло случиться так, что что-то застряло в парсере, и он не сразу "нашел" cout. (В таком случае, возможно, попробуйте перезапустить VS?)

person Dan Tao    schedule 08.12.2009
comment
Нет, в std :: (в завершении) нет cout, endl, cerr - person daisy; 28.10.2012

Возьми код

#include <iostream>
using namespace std;

из вашего файла .cpp создайте файл заголовка и поместите его в файл .h. Затем добавьте

#include "whatever your header file is named.h"

вверху вашего кода .cpp. Затем запустите его снова.

person Jameyson    schedule 29.12.2010

У меня была такая же проблема при запуске проекта ms c ++ 2010 с нуля - я удалил все файлы заголовков, сгенерированные ms, но использовал:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main() {
   cout << "hey" << endl;
   return 0;
}

Мне пришлось включить stdafx.h, так как это вызывало ошибку, когда его не было.

person oly    schedule 01.11.2010

Перед тем, как начать эту программу, избавьтесь от всего кода и создайте простой hello world внутри main. Включите только iostream и используйте пространство имен std ;. Постепенно добавляйте к нему, чтобы найти свою проблему.

cout << "hi" << endl;
person JonH    schedule 08.12.2009
comment
я только что сделал, но ничего не изменилось - person Wallter; 08.12.2009
comment
Хорошо, так что делайте то, что все сказали. Избавьтесь от всего своего кода. просто сохраните пространство имен using и заголовок iostream. затем вставьте это в: int main (void) {std :: cout ‹************************************* ‹< std :: endl; возврат 0; } скажите нам, работает ли это. - person JonH; 08.12.2009
comment
Если он не скомпилирует файл только с #include <iostream> int main() { std::cout << "ok"; }, значит, в вашей реализации на C ++ что-то сильно не работает. Какой компилятор вы используете? - person Pavel Minaev; 08.12.2009
comment
Также это главное, а не главное. В C ++ важен регистр. Предлагаю вам Google C ++ hello world. - person JonH; 08.12.2009
comment
Избавьтесь от точки с запятой после функции bob. Он стоит перед main, поэтому он вам не нужен. - person JonH; 08.12.2009
comment
Я не думаю, что VS 2010 Beta 2 можно использовать для C ++. С заголовками есть серьезные проблемы. Я не могу скомпилировать все, что у меня есть. - person David Thornley; 08.12.2009
comment
@David: это было бы очень странно, поскольку я довольно часто использую VS2010 beta 2, особенно для C ++, без каких-либо проблем. Если у вас возникли серьезные проблемы, сообщите об этом как об ошибке в MS Connect! (connect.microsoft.com/VisualStudio/feedback) - person Pavel Minaev; 08.12.2009
comment
@Wallter: вы компилируете это из VS? или из командной строки с помощью cl.exe? - person Pavel Minaev; 08.12.2009
comment
@Pavel Minaev: использование встроенной функции сборки CTRL-F5 - person Wallter; 15.12.2009

Вы уверены, что он компилируется как C ++? Проверьте имя файла (оно должно заканчиваться на .cpp). Проверьте настройки вашего проекта.

В вашей программе просто нет ничего плохого, а cout находится в namespace std. Ваша установка VS 2010 Beta 2 неисправна, и я не думаю, что это просто ваша установка.

Я не думаю, что VS 2010 еще готов для C ++. Стандартная программа «Hello, World» не работала в Beta 1. Я только что попытался создать тестовое консольное приложение Win32, и в сгенерированном файле test.cpp не было функции main().

У меня очень-очень плохое предчувствие по поводу VS 2010.

person David Thornley    schedule 08.12.2009
comment
Учитывая, что VS2010 написан с использованием самого себя (и скомпилирован с использованием компилятора VC10, а в коде используются новые функции C ++ 0x, такие как лямбда-выражения и т. Д.), Я могу заверить вас, что он вполне готов для C ++. Если у вас есть проблемы с приложениями Hello, world, это звучит как прерванная установка (что, скорее всего, является ошибкой) или какая-то ошибка после установки. В любом случае это ненормально, и определенно не является нормальным ни для бета-версии 1, ни для бета-версии 2, поэтому, пожалуйста, сообщите об этом как об ошибке в Connect. - person Pavel Minaev; 08.12.2009
comment
@Pavel: Спасибо; как вы можете сказать, я не заставлял его работать. Когда-нибудь после нынешнего кризиса я постараюсь добавить несколько отчетов об ошибках. - person David Thornley; 09.12.2009

Попробуй, заработает. Проверял в Windows XP, Visual Studio 2010 Express.

#include "stdafx.h"
#include <iostream>
using namespace std;

void main( ) 
{
   int i = 0;
   cout << "Enter a number: ";
   cin >> i;
}
person Abdullah Muhammad    schedule 14.11.2010
comment
main возвращает int. Всегда. - person Lightness Races in Orbit; 07.12.2012

При создании проекта вы неправильно установили «использовать предварительно скомпилированные заголовки». Измените его в свойствах -> C / C ++ -> предварительно скомпилированные заголовки.

person john ktejik    schedule 16.12.2012

В Visual Studio используйте все файлы заголовков ниже "stdafx.h".

person Nithin    schedule 01.09.2013

Просто используйте printf!

Включите stdio.h в свой stdafx.h файл заголовка для printf.

person Ngoo Nam    schedule 18.11.2014

Включите библиотеку std, вставив следующую строку вверху вашего кода:

using namespace std;
person cahit beyaz    schedule 27.02.2017

обычно хранится в папке C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ include. Сначала проверьте, есть ли он еще. Затем выберите «Инструменты + параметры», «Проекты и решения», «Каталоги VC ++», выберите «Включить файлы» в поле со списком «Показать каталоги для» и дважды проверьте, что $ (VCInstallDir) include находится в верхней части списка.

person Manohar    schedule 04.02.2010

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

Раньше я делал ванильный код на C для боксов в стиле unix, решил, что сам немного поиграю с этим.

Первая программа, которую я попробовал, была:

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World!";
    return 0;
}

Здесь важно отметить ... если вы КОГДА-ЛИБО кодировали на C,

int _tmain(int argc, _TCHAR* argv[])

Выглядит странно. должен быть:

int main( int argc, char ** argv )

В моем случае я просто изменил программу на:

#include <iostream>
using namespace std;

int main()
{
     cout << "Hello world from  VS 2010!\n";
     return 0;
}

И все работало нормально.

Примечание. Используйте CTRL + F5, чтобы окно консоли оставалось неизменным и вы могли видеть результаты.

person avgvstvs    schedule 29.02.2012

Я пришел сюда, потому что у меня была такая же проблема, но когда я сделал #include "stdafx.h", он сказал, что не нашел этот файл.
Что меня подвело: #include <algorithm>.
Я использую Microsoft Visual Studio 2008.
Это то, что вы можете использовать тогда, в т.ч. 'count': Ссылка

person Tenzin    schedule 05.12.2016

В VS2017 stdafx.h кажется замененным на pch.h см. эта статья,

так что используйте:

#include "pch.h"
#include <iostream>

using namespace std;

int main() {
    cout << "Enter 2 numbers:" << endl;
person yu yang Jian    schedule 07.06.2020

Если бы эта проблема возникла, когда файлы заголовков объявлены с использованием пространства имен std ;, это может сбивать с толку компилятор GNU; в любом случае это плохой стиль!

Решение предоставляло std :: cout ... в заголовках и перемещало с использованием пространства имен std в файл реализации.

person Sam Ginrich    schedule 24.03.2021


Это был компилятор - сейчас я использую Eclipse Galileo, и программа работает как чудо


person Wallter    schedule 15.12.2009
comment
Это был компилятор, в то время, когда Visual Studio находилась на стадии бета-тестирования, это была одна из ошибок, которую они позже отладили из компилятора. Сейчас я использую официальную версию компилятора Visual Studio 2010, и все работает. Нет никаких сомнений в том, что проблема была в компиляторе. (как указано ниже Амелией - я был не один в этой проблеме) - person Wallter; 24.09.2010
comment
За исключением того, что Амелия говорит о другом компиляторе (который определенно не имеет этой проблемы). Кстати, было бы неплохо, если бы вы отредактировали вопрос, чтобы конкретно упомянуть, что проблема была связана с бета-версией 2010 года. Было бы обидно, если бы какой-то новичок напишет плохой код, а затем увидит ваш вопрос и предположит, что это VS2010, который просто сломан. - person jalf; 29.12.2010