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;
}
asked Oct 24, 2012 at 13:12
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 example std::cout.
Also, throw away any book or notes that mention the thing you said.
Puppy
144k36 gold badges252 silver badges457 bronze badges
answered Oct 24, 2012 at 13:14
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
838k230 gold badges1561 silver badges1929 bronze badges
answered Oct 24, 2012 at 13:14
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
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;
}
asked Oct 24, 2012 at 13:12
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 example std::cout.
Also, throw away any book or notes that mention the thing you said.
Puppy
144k36 gold badges252 silver badges457 bronze badges
answered Oct 24, 2012 at 13:14
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
838k230 gold badges1561 silver badges1929 bronze badges
answered Oct 24, 2012 at 13:14
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
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
Доброе время суток.
__________________
0 |
|
Почетный модератор 7388 / 2634 / 281 Регистрация: 29.07.2006 Сообщений: 13,696 |
|
|
01.03.2012, 02:44 |
2 |
|
AntiDriver, а в путях инклуда, в которых компилер ищет, есть вообще такая либа? Командой g++ компилишь? Добавлено через 1 минуту
Но при попытке откомпилировать программу на си со сточкой #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 |
|
в си по нулям, скачал несколько книжек, там приводятся примеры кода с этим iostream Тебе уже сказали, что это не си, а плюсы.
0 |
|
fasked 5038 / 2617 / 241 Регистрация: 07.10.2009 Сообщений: 4,310 Записей в блоге: 1 |
||||
|
01.03.2012, 16:03 |
6 |
|||
|
#include <iostream.h> и даже если на C++, то все равно неправильно.
0 |
|
21264 / 8280 / 637 Регистрация: 30.03.2009 Сообщений: 22,635 Записей в блоге: 30 |
|
|
01.03.2012, 18:26 |
7 |
|
скачал несколько книжек, там приводятся примеры кода с этим iostream Скорее всего ты невнимательно прочитал название книги, и книга была по Си++, а не по Си. Но если книга была по Си, то смело выбрасывай её в помойку
0 |
|
0 / 0 / 1 Регистрация: 05.06.2010 Сообщений: 17 |
|
|
01.03.2012, 21:34 [ТС] |
8 |
|
Уже терпение лопается. Все книжки, которые скачиваю, даже по си без плюсов, там этот iostream. Подскажите какую-нибудь где его нет, пожалуйста.
0 |
|
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 |
|
даже по си без плюсов, там этот iostream можно пример?
0 |
|
0 / 0 / 1 Регистрация: 05.06.2010 Сообщений: 17 |
|
|
01.03.2012, 22:45 [ТС] |
11 |
|
Удалил уже эту книжку, к сожалению. Хорошо, а как тогда заставить компиляторы с++ в linux видеть этот iostream? Сколько уже сред не ставил, везде одна и та же фигня, не видят. Иначе придётся писать программы под виртуалкой и только для винды. А для собственных нужд как и раньше на паскале.
0 |
|
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 |
|
Сколько уже сред не ставил, везде одна и та же фигня, не видят А ты не среду ставь, запускай компилятор напрямую и компилируй.
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 |
|
iostream.h тебе уже говорили, у этого файла нет расширения. только имя. к тому же, две ошибки в одной строке:
void main();
0 |
|
21264 / 8280 / 637 Регистрация: 30.03.2009 Сообщений: 22,635 Записей в блоге: 30 |
|
|
03.03.2012, 00:18 |
16 |
|
Тогда надо установить пакет с названием что-то типа c++devel Добавлено через 14 секунд Добавлено через 4 минуты Добавлено через 1 минуту
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 |
|
ты ошибки в своей мегапрограмме исправил?
0 |
|
Почетный модератор 7388 / 2634 / 281 Регистрация: 29.07.2006 Сообщений: 13,696 |
|
|
03.03.2012, 11:40 |
19 |
|
AntiDriver, $ cat > 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>
- замещать
#include <iostream>с#include <stdio.h>, удалятьusing namespace std; -
С
#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


