Fatal error iostream нет такого файла или каталога

Why when I wan to compile the following multi thread merge sorting C program, I receive this error: ap@sharifvm:~/forTHE04a$ gcc -g -Wall -o mer mer.c -lpthread mer.c:4:20: fatal error: iostream:...

Why when I wan to compile the following multi thread merge sorting C program, I receive this error:

ap@sharifvm:~/forTHE04a$ gcc -g -Wall -o mer mer.c -lpthread
mer.c:4:20: fatal error: iostream: No such file or directory
 #include <iostream>
                    ^
compilation terminated.
ap@sharifvm:~/forTHE04a$ gcc -g -Wall -o mer mer.c -lpthread
mer.c:4:22: fatal error: iostream.h: No such file or directory
 #include <iostream.h>
                      ^
compilation terminated.

My program:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <iostream>
using namespace std;

#define N 2  /* # of thread */

int a[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};  /* target array */

/* structure for array index
 * used to keep low/high end of sub arrays
 */
typedef struct Arr {
    int low;
    int high;
} ArrayIndex;

void merge(int low, int high)
{
        int mid = (low+high)/2;
        int left = low;
        int right = mid+1;

        int b[high-low+1];
        int i, cur = 0;

        while(left <= mid && right <= high) {
                if (a[left] > a[right])
                        b[cur++] = a[right++];
                else
                        b[cur++] = a[right++];
        }

        while(left <= mid) b[cur++] = a[left++];
        while(right <= high) b[cur++] = a[left++];
        for (i = 0; i < (high-low+1) ; i++) a[low+i] = b[i];
}

void * mergesort(void *a)
{
        ArrayIndex *pa = (ArrayIndex *)a;
        int mid = (pa->low + pa->high)/2;

        ArrayIndex aIndex[N];
        pthread_t thread[N];

        aIndex[0].low = pa->low;
        aIndex[0].high = mid;

        aIndex[1].low = mid+1;
        aIndex[1].high = pa->high;

        if (pa->low >= pa->high) return 0;

        int i;
        for(i = 0; i < N; i++) pthread_create(&thread[i], NULL, mergesort, &aIndex[i]);
        for(i = 0; i < N; i++) pthread_join(thread[i], NULL);

        merge(pa->low, pa->high);

        //pthread_exit(NULL);
        return 0;
}

int main()
{
        ArrayIndex ai;
        ai.low = 0;
        ai.high = sizeof(a)/sizeof(a[0])-1;
        pthread_t thread;

        pthread_create(&thread, NULL, mergesort, &ai);
        pthread_join(thread, NULL);

        int i;
        for (i = 0; i < 10; i++) printf ("%d ", a[i]);
        cout << endl;

        return 0;
}

Possible Duplicate:
No such file iostream.h when including

Even after naming the source file with .cpp extension. my compiler gives this error, both in command prompt and Codeblocks. How can I fix this issue?

#include <iostream.h>


int main(){

    cout<<"Hello World!n";
    return 0;
}

Community's user avatar

asked Oct 24, 2012 at 13:12

Assasins's user avatar

1

That header doesn’t exist in standard C++. It was part of some pre-1990s compilers, but it is certainly not part of C++.

Use #include <iostream> instead. And all the library classes are in the std:: namespace, for ex­am­ple std::cout.

Also, throw away any book or notes that mention the thing you said.

Puppy's user avatar

Puppy

144k36 gold badges252 silver badges457 bronze badges

answered Oct 24, 2012 at 13:14

Kerrek SB's user avatar

Kerrek SBKerrek SB

457k91 gold badges867 silver badges1074 bronze badges

3

Using standard C++ calling (note that you should use namespace std for cout or add using namespace std;)

#include <iostream>

int main()
{
    std::cout<<"Hello World!n";
    return 0;
}

paxdiablo's user avatar

paxdiablo

838k230 gold badges1561 silver badges1929 bronze badges

answered Oct 24, 2012 at 13:14

il_guru's user avatar

il_guruil_guru

8,2932 gold badges43 silver badges51 bronze badges

1

You should be using iostream without the .h.

Early implementations used the .h variants but the standard mandates the more modern style.

answered Oct 24, 2012 at 13:14

paxdiablo's user avatar

paxdiablopaxdiablo

838k230 gold badges1561 silver badges1929 bronze badges

Possible Duplicate:
No such file iostream.h when including

Even after naming the source file with .cpp extension. my compiler gives this error, both in command prompt and Codeblocks. How can I fix this issue?

#include <iostream.h>


int main(){

    cout<<"Hello World!n";
    return 0;
}

Community's user avatar

asked Oct 24, 2012 at 13:12

Assasins's user avatar

1

That header doesn’t exist in standard C++. It was part of some pre-1990s compilers, but it is certainly not part of C++.

Use #include <iostream> instead. And all the library classes are in the std:: namespace, for ex­am­ple std::cout.

Also, throw away any book or notes that mention the thing you said.

Puppy's user avatar

Puppy

144k36 gold badges252 silver badges457 bronze badges

answered Oct 24, 2012 at 13:14

Kerrek SB's user avatar

Kerrek SBKerrek SB

457k91 gold badges867 silver badges1074 bronze badges

3

Using standard C++ calling (note that you should use namespace std for cout or add using namespace std;)

#include <iostream>

int main()
{
    std::cout<<"Hello World!n";
    return 0;
}

paxdiablo's user avatar

paxdiablo

838k230 gold badges1561 silver badges1929 bronze badges

answered Oct 24, 2012 at 13:14

il_guru's user avatar

il_guruil_guru

8,2932 gold badges43 silver badges51 bronze badges

1

You should be using iostream without the .h.

Early implementations used the .h variants but the standard mandates the more modern style.

answered Oct 24, 2012 at 13:14

paxdiablo's user avatar

paxdiablopaxdiablo

838k230 gold badges1561 silver badges1929 bronze badges

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

Итак, есть первая программа, типа Hello world :

#include <iostream>
using namespace std;
main ()
{
   cout << "Добро пожаловать в C++!n";

   return 0;

}


До указания пространства имён идентификаторов std, писало :

fatal error: iostream: Нет такого файла или каталога
Указавши его, происходит вот такая ошибка:

alexandr@Alexandr:~$ cc welcom.cpp
/tmp/cclfxBtN.o: In function `main':
welcom.cpp:(.text+0x14): undefined reference to `std::cout'
welcom.cpp:(.text+0x19): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/cclfxBtN.o: In function `__static_initialization_and_destruction_0(int, int)':
welcom.cpp:(.text+0x41): undefined reference to `std::ios_base::Init::Init()'
welcom.cpp:(.text+0x46): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cclfxBtN.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Вы, сейчас сожете сказать, что не подключены библиотеки для iostream, логично, но и здесь я перерыл свой Синаптик.Какие махинации я только не совершал, что только не пытался включить/отключить.Честно говоря, я уже сам толком не знаю должны ли быть включены те или иные библиотеки, но метод тыка результата не дал.

Ах да, sudo apt-get install build-essential, этот этап производился.
При команде:

alexandr@Alexandr:~$ aptitude search iostream
i   libboost-iostreams-dev          - Boost.Iostreams Library development files
p   libboost-iostreams1.40-dev      - Boost.Iostreams Library development files
c   libboost-iostreams1.40.0        - Boost.Iostreams Library                   
i   libboost-iostreams1.42-dev      - Boost.Iostreams Library development files
i A libboost-iostreams1.42.0        - Boost.Iostreams Library
выдаёт информацию такого рода, может это на что-то укажет, уж я не знаю.

Вопросы, естественно, по существу :как с этим бороться ?Чего не хватает мне, подскажите ?
И ещё вопрос, возможно ли полностью отключить/удалить компилятор и настроить его заново, если да, каким образом ?

0 / 0 / 1

Регистрация: 05.06.2010

Сообщений: 17

1

01.03.2012, 02:39. Показов 19130. Ответов 19


Доброе время суток.
Пользуюсь linux ubuntu 10.04.4, хочу научиться писать на си (знаю только паскаль), наиболее удобной средой для меня (когда писал на паскале) была Geany. Но при попытке откомпилировать программу на си со сточкой #include <iostream.h> выводит указанную в заголовке ошибку. Файл stdio.h видит, а iostream.h уже нет. Пробовал убирать расширение — не помогло. Установил другую среду — NetBeans, там такая же фигня. Поэтому подскажите пожалуйста, как с этим справиться? В гугле нашёл только решение для windows.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

01.03.2012, 02:44

2

AntiDriver, а в путях инклуда, в которых компилер ищет, есть вообще такая либа? Командой g++ компилишь?

Добавлено через 1 минуту

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

Но при попытке откомпилировать программу на си со сточкой #include <iostream.h>

постой, нафига тебе на си иострим? Это плюсы. Руками компилируй, хватит среды насиловать.



0



бжни

2473 / 1684 / 135

Регистрация: 14.05.2009

Сообщений: 7,162

01.03.2012, 03:13

3

в си нету, не было и не будет iostream



0



0 / 0 / 1

Регистрация: 05.06.2010

Сообщений: 17

01.03.2012, 13:39

 [ТС]

4

Я же уже говорил, что знаю только паскаль, в си по нулям, скачал несколько книжек, там приводятся примеры кода с этим iostream



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

01.03.2012, 13:47

5

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

в си по нулям, скачал несколько книжек, там приводятся примеры кода с этим iostream

Тебе уже сказали, что это не си, а плюсы.



0



fasked

Эксперт С++

5038 / 2617 / 241

Регистрация: 07.10.2009

Сообщений: 4,310

Записей в блоге: 1

01.03.2012, 16:03

6

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

#include <iostream.h>

и даже если на C++, то все равно неправильно.

C++
1
#include <iostream>



0



Эксперт CАвтор FAQ

21264 / 8280 / 637

Регистрация: 30.03.2009

Сообщений: 22,635

Записей в блоге: 30

01.03.2012, 18:26

7

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

скачал несколько книжек, там приводятся примеры кода с этим iostream

Скорее всего ты невнимательно прочитал название книги, и книга была по Си++, а не по Си. Но если книга была по Си, то смело выбрасывай её в помойку



0



0 / 0 / 1

Регистрация: 05.06.2010

Сообщений: 17

01.03.2012, 21:34

 [ТС]

8

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



0



Эксперт CАвтор FAQ

21264 / 8280 / 637

Регистрация: 30.03.2009

Сообщений: 22,635

Записей в блоге: 30

01.03.2012, 21:54

9



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

01.03.2012, 22:35

10

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

даже по си без плюсов, там этот iostream

можно пример?



0



0 / 0 / 1

Регистрация: 05.06.2010

Сообщений: 17

01.03.2012, 22:45

 [ТС]

11

Удалил уже эту книжку, к сожалению. Хорошо, а как тогда заставить компиляторы с++ в linux видеть этот iostream? Сколько уже сред не ставил, везде одна и та же фигня, не видят. Иначе придётся писать программы под виртуалкой и только для винды. А для собственных нужд как и раньше на паскале.



0



Эксперт CАвтор FAQ

21264 / 8280 / 637

Регистрация: 30.03.2009

Сообщений: 22,635

Записей в блоге: 30

01.03.2012, 23:14

12

Надо установить компилятор g++ (и его же запускать)



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

02.03.2012, 02:11

13

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

Сколько уже сред не ставил, везде одна и та же фигня, не видят

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



0



0 / 0 / 1

Регистрация: 05.06.2010

Сообщений: 17

02.03.2012, 23:25

 [ТС]

14

Так в том то и дело что g++ (и даже gcc) установлены.

Код

yegor@t9ttt97t:~/Рабочий стол$ cat 1.cpp
#include <iostream.h>
void main();
{
}

yegor@t9ttt97t:~/Рабочий стол$ gcc 1.cpp
1.cpp:1:22: error: iostream.h: Нет такого файла или каталога



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

02.03.2012, 23:41

15

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

iostream.h

тебе уже говорили, у этого файла нет расширения. только имя.

к тому же, две ошибки в одной строке:

Цитата
Сообщение от AntiDriver
Посмотреть сообщение

void main();



0



Эксперт CАвтор FAQ

21264 / 8280 / 637

Регистрация: 30.03.2009

Сообщений: 22,635

Записей в блоге: 30

03.03.2012, 00:18

16

Тогда надо установить пакет с названием что-то типа c++devel

Добавлено через 14 секунд
Или g++devel, или libstdc++

Добавлено через 4 минуты
Кстати, g++ точно установлен? А то ты показал, что gcc запускаешь

Добавлено через 1 минуту
Нашёл. У меня установлены пакеты libstdc++, libstdc++-6-4.4-dev



0



0 / 0 / 1

Регистрация: 05.06.2010

Сообщений: 17

03.03.2012, 01:34

 [ТС]

17

Эти пакеты уже установлены.



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

03.03.2012, 02:52

18

ты ошибки в своей мегапрограмме исправил?
компилишь с помощью g++ ?



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

03.03.2012, 11:40

19

AntiDriver,

$ cat > main.cpp
#include<iostream>
int main()
{
}
$ g++ main.cpp
$ ll
total 20
drwxrwxr-x 2 vourhey vourhey 4096 2012-03-03 11:34 ./
drwxrwxr-x 4 vourhey vourhey 4096 2012-03-03 11:33 ../
-rwxrwxr-x 1 vourhey vourhey 7483 2012-03-03 11:34 a.out*
-rw-rw-r— 1 vourhey vourhey 33 2012-03-03 11:33 main.cpp



0



0 / 0 / 1

Регистрация: 05.06.2010

Сообщений: 17

04.03.2012, 17:53

 [ТС]

20

Да, исправил всё, всё откомпилировалось. Один пакет из зависимостей почему-то не был установлен. Всем спасибо за ответы!



0



Почему, когда я хочу скомпилировать следующую многопоточную программу сортировки слиянием, я получаю эту ошибку:

ap@sharifvm:~/forTHE04a$ gcc -g -Wall -o mer mer.c -lpthread
mer.c:4:20: fatal error: iostream: No such file or directory
#include <iostream>
^
compilation terminated.
ap@sharifvm:~/forTHE04a$ gcc -g -Wall -o mer mer.c -lpthread
mer.c:4:22: fatal error: iostream.h: No such file or directory
#include <iostream.h>
^
compilation terminated.

Моя программа:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <iostream>
using namespace std;

#define N 2  /* # of thread */

int a[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};  /* target array */

/* structure for array index
* used to keep low/high end of sub arrays
*/
typedef struct Arr {
int low;
int high;
} ArrayIndex;

void merge(int low, int high)
{
int mid = (low+high)/2;
int left = low;
int right = mid+1;

int b[high-low+1];
int i, cur = 0;

while(left <= mid && right <= high) {
if (a[left] > a[right])
b[cur++] = a[right++];
else
b[cur++] = a[right++];
}

while(left <= mid) b[cur++] = a[left++];
while(right <= high) b[cur++] = a[left++];
for (i = 0; i < (high-low+1) ; i++) a[low+i] = b[i];
}

void * mergesort(void *a)
{
ArrayIndex *pa = (ArrayIndex *)a;
int mid = (pa->low + pa->high)/2;

ArrayIndex aIndex[N];
pthread_t thread[N];

aIndex[0].low = pa->low;
aIndex[0].high = mid;

aIndex[1].low = mid+1;
aIndex[1].high = pa->high;

if (pa->low >= pa->high) return 0;

int i;
for(i = 0; i < N; i++) pthread_create(&thread[i], NULL, mergesort, &aIndex[i]);
for(i = 0; i < N; i++) pthread_join(thread[i], NULL);

merge(pa->low, pa->high);

//pthread_exit(NULL);
return 0;
}

int main()
{
ArrayIndex ai;
ai.low = 0;
ai.high = sizeof(a)/sizeof(a[0])-1;
pthread_t thread;

pthread_create(&thread, NULL, mergesort, &ai);
pthread_join(thread, NULL);

int i;
for (i = 0; i < 10; i++) printf ("%d ", a[i]);
cout << endl;

return 0;
}

5

Решение

ни <iostream> ни <iostream.h> являются стандартными заголовочными файлами C. Ваш код предназначен для C ++, где <iostream> является действительным заголовком. использование g++.cpp расширение файла) для кода C ++.

Кроме того, эта программа использует в основном конструкции, которые в любом случае доступны в Си. Достаточно просто преобразовать всю программу для компиляции с использованием компилятора Си. Просто удалить #include <iostream> а также using namespace std;и заменить cout << endl; с putchar('n');… советую компилировать с использованием C99 (например. gcc -std=c99)

24

Другие решения

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

В любом случае, у вас есть .c исходный файл, и большая часть кода выглядит в соответствии со стандартами C, за исключением того, что #include <iostream> а также using namespace std;

C эквивалент для встроенных функций стандарта C ++ #include<iostream> можно получить через #include<stdio.h>

  1. замещать #include <iostream> с #include <stdio.h>, удалять using namespace std;
  2. С #include <iostream> снял, вам понадобится стандартная альтернатива С для cout << endl;что может быть сделано printf("n"); или же putchar('n');
    Из двух вариантов, printf("n"); работает быстрее, как я заметил.

    Когда используется printf("n"); в приведенном выше коде вместо cout<<endl;

    $ time ./thread.exe
    1 2 3 4 5 6 7 8 9 10
    
    real    0m0.031s
    user    0m0.030s
    sys     0m0.030s
    

    Когда используется putchar('n'); в приведенном выше коде вместо cout<<endl;

    $ time ./thread.exe
    1 2 3 4 5 6 7 8 9 10
    
    real    0m0.047s
    user    0m0.030s
    sys     0m0.030s
    

Скомпилировано с Cygwin gcc (GCC) 4.8.3 версия. результаты усреднены по 10 выборкам. (Заняло у меня 15 минут)

4

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Fatal error insufficient shared memory reg ru
  • Fatal error insufficient power configured
  • Fatal error in vertex shader compilation
  • Fatal error in twain device driver
  • Fatal error in object unshallow

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии