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

iostream, StdAfx.h - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 57
04.02.2013, 03:52     iostream, StdAfx.h #1
Начал изучать С++ попытался набрать первый листинг и посмотреть программу в работе и тут же натолкнулся на ошибку. Первое, о чём хотел бы спросить, что такое 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 отсутствует?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 03:52     iostream, StdAfx.h
Посмотрите здесь:

iostream C++
stdafx.h: No such file or directory C++
Что такое stdafx.h и как это отключить? C++
файлы stdafx C++
C++ stdafx.h и StdAfx.h
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:01     iostream, StdAfx.h #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. Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11837 / 6816 / 771
Регистрация: 27.09.2012
Сообщений: 16,908
Записей в блоге: 2
Завершенные тесты: 1
04.02.2013, 04:11     iostream, StdAfx.h #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";
Но, имхо, второе не очень хороший способ
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:23     iostream, StdAfx.h #4
Gleb4uk, а также вы можете ещё написать следуюший код:
C++
1
2
#define cout std::cout
#define cin std::cin
Это будет более грубый эквивалент такой записи:

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

Добавлено через 4 минуты
Цитата Сообщение от Gleb4uk Посмотреть сообщение
Спасибо всем большое! Чуток разобрался.
и вместо iostream использовал stdio.h,
Это вы зря сделали, именно поэтому компилятор ругается на cin и cout
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 57
04.02.2013, 04:35  [ТС]     iostream, StdAfx.h #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 который)
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 04:44     iostream, StdAfx.h #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;
}

Не по теме:

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

Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 57
04.02.2013, 04:47  [ТС]     iostream, StdAfx.h #9
ООООо! Спасибо огромное! Заработало!
Или я сонный, или что-то не пойму. До этого iostream тоже пробовал без расширения - не хотел работать... наверное испугался, когда я на помощь позвал
Я так понимаю название библиотеки можно писать и в двойных кавычках и в угловых скобках?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11837 / 6816 / 771
Регистрация: 27.09.2012
Сообщений: 16,908
Записей в блоге: 2
Завершенные тесты: 1
04.02.2013, 04:54     iostream, StdAfx.h #10
Цитата Сообщение от Gleb4uk Посмотреть сообщение
у. До этого iostream тоже пробовал без расширения - не хотел работать... наверное испугался, когда я на помощь позвал
Просто там вы использовали без std.

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

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

Не по теме:

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

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

библиотека stdafx.h на MAC OS, что делать?:) C++
C++ ошибка stdafx.h: No such file or directory
C++ Ошибка подключения stdafx.h

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

Или воспользуйтесь поиском по форуму:
Gleb4uk
2 / 2 / 0
Регистрация: 08.08.2012
Сообщений: 57
04.02.2013, 05:34  [ТС]     iostream, StdAfx.h #17
Большое спасибо за ответы!
Yandex
Объявления
04.02.2013, 05:34     iostream, StdAfx.h
Ответ Создать тему
Опции темы

Текущее время: 14:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru