Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 58
#1

iostream, StdAfx.h - C++

04.02.2013, 03:52. Просмотров 1422. Ответов 16
Метки нет (Все метки)

Начал изучать С++ попытался набрать первый листинг и посмотреть программу в работе и тут же натолкнулся на ошибку. Первое, о чём хотел бы спросить, что такое StdAfx.h, и почему при создании нового проекта он уже был в тексте программы? В книге ни слова об этом, но когда удаляю эту строку, добавляется ещё одна ошибка по поводу отсутствия этой строки. . Во-вторых компилятор выдаёт ошибку, что-то вроде того, что не может найти iostream, а конкретнее:

1.cpp(2): warning C4627: #include "iostream": пропущен при поиске использования предкомпилированного заголовка
Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1.cpp(9): error C2065: cout: необъявленный идентификатор
1.cpp(10): error C2065: cin: необъявленный идентификатор
1.cpp(11): error C2065: cout: необъявленный идентификатор
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

По поводу iostream - пробовал и без расширения и с расширением h. А как видно из отчёта - cout, cin вообще оказались неизвестными объектами. Как же их тогда использовать, если iostream отсутствует?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 03:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос iostream, StdAfx.h (C++):

В чём отличие заголовочных файлов <iostream> и <iostream.h> ? - C++
Добрый день! Учу С++ в Microsoft Visual C++ 6.0. Листинг начинал с #include &lt;iostream&gt;, и программа не работала. Но когда начал с...

stdafx.h и StdAfx.h - C++
Добавил в свое решение проект (win32, lib). Добавил класс. У меня создался cpp-файл каркас с #include &quot;StdAfx.h&quot;. Почему здесь...

Подключение stdafx.h - C++
Здравствуйте! Помогите , пожалуйста, разобраться с проблемой! Без подключения библиотеки &quot;stdafx.h&quot; просит подключить ее, а после того,...

файлы stdafx - C++
Здравствуйте, форумчане! Подскажите, пожалуйста, зачем нужны файлы stdafx? почему в начале создания консольного приложения иногда...

Не найден файл stdafx.h - C++
#include &lt;iostream&gt; using namespace std; int main() { int i=0; while(i++&lt;10){ int k=2, b=3; ...

Ошибка подключения stdafx.h - C++
скажите пожалуйста как исправит эту ошибку Сообщения и тексты программ надо копировать в текст поста

16
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:01 #2
Проект-> свойства->св.конфигурации->С/С++->Предварительно скомпилированные заголовки->не использовать предварительно скомпилированные заголовки

Добавлено через 5 минут
В описании stdafx.h всё написано

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
//
 
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
 
 
 
// TODO. Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
0
Croessmah
Эксперт CЭксперт С++
13506 / 7664 / 866
Регистрация: 27.09.2012
Сообщений: 18,850
Записей в блоге: 3
Завершенные тесты: 1
04.02.2013, 04:11 #3
Цитата Сообщение от Gleb4uk Посмотреть сообщение
почему при создании нового проекта он уже был в тексте программы?
При создании поставьте галочку "пустой проект" и его не будет.

Цитата Сообщение от Gleb4uk Посмотреть сообщение
По поводу iostream - пробовал и без расширения и с расширением h
с расширением .h давно устарел и не используется, в нем все данные были в глобальном пространстве имен. В файле же без расширения всё содержится в пространстве имен std, поэтому нужно обращаться к cin и cout с помощью
C++
1
2
std::cin>>x;
std::cout<<"AAA";
Можно, например, написать в программе
C++
1
2
using std::cin;
using std::cout;
или просто
C++
1
using namespace std;
и далее писать
C++
1
2
cin>>x;
cout<<"AAA";
Но, имхо, второе не очень хороший способ
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:23 #4
Gleb4uk, а также вы можете ещё написать следуюший код:
C++
1
2
#define cout std::cout
#define cin std::cin
Это будет более грубый эквивалент такой записи:

C++
1
2
using std::cin;
using std::cout;
0
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 58
04.02.2013, 04:28  [ТС] #5
Спасибо всем большое! Чуток разобрался.
Я вот пока только отключил предварительно скомпилированные заголовки и вместо iostream использовал stdio.h, добавил строку using namespace std;, но компилятор всё равно ругается на cin, cout.
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:33 #6
Gleb4uk, напишите код вашей программы сюда.

Добавлено через 4 минуты
Цитата Сообщение от Gleb4uk Посмотреть сообщение
Спасибо всем большое! Чуток разобрался.
и вместо iostream использовал stdio.h,
Это вы зря сделали, именно поэтому компилятор ругается на cin и cout
0
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 58
04.02.2013, 04:35  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// 1.cpp: главный файл проекта.
#include "stdio.h"
 
using namespace std;
 
int main()
{
    int fleas;
    cout << "How many fleas does your cat have?";
    cin >> fleas;
    cout << "Well, that's " << fleas << " fleas too many!\n";
    return 0;
}
А вот отчёт компилятора:

------ Построение начато: проект: 1, Конфигурация: Debug Win32 ------
1.cpp
1.cpp(9): error C2065: cout: необъявленный идентификатор
1.cpp(10): error C2065: cin: необъявленный идентификатор
1.cpp(11): error C2065: cout: необъявленный идентификатор
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


И вот сейчас разглядываю содержимое библиотеки stdio там нет объявления объектов cin, cout.
Какую библиотеку подключать, чтоб они заработали? У меня MS Visual C++ 2010(Express который)
0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:44 #8
Gleb4uk, вот так будет работать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <conio.h>               //нужен для _getch();
#include <iostream>             //для cout и cin
using namespace std;
 
int main()
{
    int fleas;
    cout << "How many fleas does your cat have?\n";
    cin >> fleas;
    cout << "Well, that's " << fleas << " fleas too many!\n";
    _getch();              //ждем символ с клавиатуры, чтобы окно не закрылось
    return 0;
}
Добавлено через 4 минуты
Кстати, вместо '\n' можно использовать endl, вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <conio.h>               //нужен для _getch();
#include <iostream>             //для cout и cin
using namespace std;
 
int main()
{
    int fleas;
    cout << "How many fleas does your cat have?" << endl;
    cin >> fleas;
    cout << "Well, that's " << fleas << " fleas too many!" << endl;
    _getch();              //ждем символ с клавиатуры, чтобы окно не закрылось
    return 0;
}

Не по теме:

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

0
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 58
04.02.2013, 04:47  [ТС] #9
ООООо! Спасибо огромное! Заработало!
Или я сонный, или что-то не пойму. До этого iostream тоже пробовал без расширения - не хотел работать... наверное испугался, когда я на помощь позвал
Я так понимаю название библиотеки можно писать и в двойных кавычках и в угловых скобках?
0
Croessmah
Эксперт CЭксперт С++
13506 / 7664 / 866
Регистрация: 27.09.2012
Сообщений: 18,850
Записей в блоге: 3
Завершенные тесты: 1
04.02.2013, 04:54 #10
Цитата Сообщение от Gleb4uk Посмотреть сообщение
у. До этого iostream тоже пробовал без расширения - не хотел работать... наверное испугался, когда я на помощь позвал
Просто там вы использовали без std.

Цитата Сообщение от Gleb4uk Посмотреть сообщение
И вот сейчас разглядываю содержимое библиотеки stdio там нет объявления объектов cin, cout.
Само собой нет. Это Си'шный хедер.
Цитата Сообщение от Пёс Посмотреть сообщение
Кстати, вместо '\n' можно использовать endl, вот так:
можно, но '\n' != std::endl
1
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:55 #11
Сначала проблема была в предкомпилированных заголовках (в Visual Studio они иногда косяпорят, поэтому их лучше сразу отключать), потом вы неправильно поняли совет Croessmah'а и убрали зачем то #include <iostream>

По поводу названия файла. Если вы включаете файл библиотеки СИ++ (такие как iostream, stdlib, conio, string и т.д.) то рекомендуется писать его имя в угловых скобках. Но если вы включаете файл из вашего проекта (такой, как например "stdafx.h"), то тогда рекомендуется писать его в кавычках.
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
04.02.2013, 04:58 #12
< > - файл ищется в путях, указанных в PATH или где-то там)
" " - файл ищется в текущей директории.
0
Croessmah
04.02.2013, 05:00
  #13

Не по теме:

Цитата Сообщение от ZoRT Посмотреть сообщение
" " - файл ищется в текущей директории.
сначала в текущей директории

0
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 05:01 #14
И ещё добавлю по поводу того, о чём говорил Croessmah. Когда он сказал что iostream.h устарел, он не имел ввиду что сам iostream файл устарел. На самом деле в библиотеке СИ++ есть 2 файла iostream и iostream.h, так вот Croessmah имел ввиду то, что iostream.h устарел по отношению к iostream. Все файлы с ".h" в конце, устарели по отношению к таким же файлам, но без ".h".
0
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 58
04.02.2013, 05:11  [ТС] #15
Спасибо большое за подробные объяснения. Если можно, ещё один вопрос. В книжку посмотрел, погуглил, на форумах - везде по-разному называют эти файлы - это библиотеки или (как в книге Стивена Прата) заголовочные файлы? Я тот же iostream просмотрел - обычный текстовый файл с кучей директив (это там где #) и каких-то объявлений, а в комментарии написано, что это хэдер. Я так понимаю, что объект в библиотеке вообще-то должен быть описан как-то посложнее и в машинном коде, да и не несколькими строчками. Получается, что в хэдере содержится только объявление объектов? (извините за недалёкость моей терминологии ). Т.е. чтоб сам код не усложнять этими объявлениями?
0
04.02.2013, 05:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 05:11
Привет! Вот еще темы с ответами:

stdafx.h: No such file or directory - C++
Как убрать ошибку? stdafx.h: No such file or directory.

Ошибка stdafx.h: No such file or directory - C++
при запуске программы выдает такую ошибку : fatal error C1083: Не удается открыть файл включение: stdafx.h: No such file or directory ...

Зачем нужен заголовочный файл stdafx.h - C++
Не видит директорию &quot;stdafx.h&quot; в Code::Block, может кто знает как подключить? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...

библиотека stdafx.h на MAC OS, что делать?:) - C++
Всем привет:) нашел на Ютубе видеоуроки по Си: http://www.youtube.com/watch?v=3w2Ui0fr6Rg&amp;feature=c4-overview-vl&amp;list=PL416C511D02A4E585 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru