проблема istream и ostream - C ++ - PullRequest
2 голосов
/ 03 марта 2011

Я использую два компилятора g ++ и Dev - C ++. когда я компилирую свою программу на Dev-C ++, она компилируется идеально. но когда я пытаюсь скомпилировать его на g ++, это дает мне две ошибки:

In file included from a2test.cpp:27:
----.h:25: error: 'ostream' has not been declared
----.h:26: error: 'istream' has not been declared

Может кто-нибудь сказать мне, что я могу сделать, чтобы решить эту проблему.

Спасибо

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

Убедитесь, что вы включили fstream.Кроме того, поместите «std ::» перед ostream или поместите где-нибудь «используя пространство имен std».

Было бы полезно, если бы вы опубликовали код, так как сейчас я просто предполагаю, основываясь на распространенных ошибках.

Я думаю, вы забыли включить fstream, потому что разные компиляторы могут использовать разные заголовочные файлы, и это может быть случай, когда g ++ имеет заголовочный файл с

// iostream
#include <fstream>

, тогда как Dev-C ++ может иметь

// iostream
// no include for fstream in this file

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

Для файлов заголовка я просто использую этот сайт, когда забываю какой.

ostream - C ++ Reference

Кажется, вам нужно включить ostream, чтобы получить ostream.Вероятно, то же самое для istream.

2 голосов
/ 03 марта 2011

Мои навыки психической отладки указывают на то, что проблема, скорее всего, означает, что ваш вызов g ++ и g ++ Dev-CPP используют разные версии gcc.Один из заголовков в (предположительно более ранней) версии, включенной в Dev-CPP, может #include стандартный заголовок C ++, который ему не нужен, что позволит заголовкам, которые не строго корректны для компиляции.

Убедитесь, что вы на самом деле #include d <iostream>, или <istream> и <ostream>, или <iosfwd> - некоторые заголовки, которые на самом деле включают эти типы для вас.

( Дополнительное примечание : Пожалуйста, не используйте Dev-CPP - проект довольно мертвый, и редактор совершает немало грехов. Плюс это не очень хороший редактор в любом случае. Как насчетCode :: Blocks или Visual Studio (оба бесплатны) вместо этого?)

0 голосов
/ 03 марта 2011

Не знаю, поможет ли это, но, во-первых, вы должны помнить, что нужно опускать ".h", который используют некоторые другие компиляторы (MS-C ++), но не ANSI / G ++. Так что это должно быть просто

#include <iostream>

Во-вторых, не забудьте:

using namespace std;

В-третьих, это было давно, но если я правильно помню, в g ++ th функции istream и ostream находятся в библиотеке "std".Таким образом, вы можете сделать что-то вроде этого:

using std::istream;
//later
istream::iostate state = ...

или, альтернативно, вы можете использовать их прямо так:

std::istream::iostate state = ...

Надеюсь, это даст вам некоторые идеи.

...