2010-07-16 2 views
4

У меня возникают проблемы с такими стандартными файлами заголовков, как iostream.h и fstream.h. В моей системе под usr/include/c++/4.3 ни один из файлов не имеет расширения «.h» (например, это просто «iostream», а не «iostream.h»). Это было бы хорошо и денди, но я пытаюсь использовать другую библиотеку DCMTK, которая делает такие вещи, как #include<iostream.h>. К сожалению, в моей системе нет такой вещи, как «iostream.h», только «iostream», что означает, что мой компилятор дает мне такие ошибки, как error: iostream.h: No such file or directory.Заголовочные файлы без .h в C++

Я думаю, что я мог бы создавать программные ссылки от iostream.h до iostream, но похоже, что это может создать, прежде всего, проблемы в будущем, и, во-вторых, быть действительно раздражающими. Есть ли другое решение?

Просто для полноты, то команда, которую я даю, чтобы скомпилировать вещь является
g++ -o gc_on_ctp -g -Wall -Idicom/include -Ldicom/lib gc_on_ctp.cpp -ldcmdata
Как вы можете себе представить, заголовочный файл находится под DICOM/включают в себя, и библиотека находится под DICOM/Lib, названный libdcmdata .А.

Спасибо!

+8

'iostream.h' и' fstream.h' являются ** НЕ ** стандартными файлами заголовков. – dan04

+1

Чтобы развернуть комментарий @ dan04, заголовки с '.h' взяты из предварительно стандартизованной версии библиотеки C++. – 2010-07-16 14:06:04

+0

Спасибо всем за подробные и очень быстрые ответы! Кроме того, чтобы избежать порочного имени DCMTK, на самом деле они используют стандартные файлы заголовков, мне просто нужно включить заголовок конфигурации, который, по-видимому, настроил некоторые макросы. Еще раз спасибо! – 2010-07-16 14:31:37

ответ

7

Я бы предложил вам посмотреть here. Это объясняет, почему и когда родился iostream.h/iostream, почему он существует и как вы должны решать эти проблемы.

В основном iostream.h следует считать DEPRECATED ненадежных и РЕАЛИЗАЦИЯ КОНКРЕТНЫЕ и используя iostream вместо этого одного может привести к ошибкам ..

+0

'В основном, iostream.h следует рассматривать как DEPRECATED' Nopes, '' не может считаться _deprecated_, потому что он никогда не был частью стандарта. См. Приложение D (ISO C++ - 98) для списка устаревших функций. –

+0

Это хороший момент. DEPRECATED - неправильный термин .. – Jack

+0

Отлично, я посмотрю, спасибо! – 2010-07-16 14:01:34

6

Просто создайте новый файл iostream.h, в котором есть одна строка: #include <iostream>. Это, по-видимому, большая ошибка DCMTK, поскольку стандарт заключается в том, что в этих именах файлов не должно быть .h.

+4

Это общее решение - Qt использует его среди других. Раньше это было более распространено, потому что некоторые компиляторы не обрабатывали файлы без .h! –

+1

Не путать с проблемой . Это немного другое. –

+0

@Chris хороший пункт. Что я предлагаю * только * работает для файла <-> file.h – Gianni

3

Эти заголовки устарели/предстандартны. На gcc я считаю, что они теперь находятся как #include <backward/iostream.h> и т. Д.

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

1

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

perl -e "s/iostream.h/iostream/g;" -pi $(find . -iname "*.cpp") 

или

find . -iname "*.cpp" -print0 | xargs -0 sed -i 's/iostream.h/iostream/g' 

ПРИМЕЧАНИЕ: Будьте осторожны, делая это ... это влияет на все файлы рекурсивно от пути, который вы начать с.

Смежные вопросы