IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Программирование на с под Linux
deviljohnson
сообщение 2.8.2007, 8:04
Сообщение #1


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Всем привет. Сразу оговорюсь, я не знал, где правильнее будет создать такую тему, то есть не со зла, поэтому прошу модеров, сильно не карать.))

Первый вопрос в следующем: линух я начал осваивать только-только, поэтому про него почти ничего не знаю, кроме того, что в нем есть встроенный компилятор gcc. Хотел испробовать, написал Программу, с большой буквы П:
Код

#include <iostream>
#include <conio>
void main(){
cout<<"inspection"<<endl;
getch();
};


Вот, что-то такое. Но скомпилировать его не выходит. Оно пишет :" error before main ". Попробовал дописать к подключенным файлам .h - тот же результат. А литературы на эту тему у меня пока нет. Вопрос: в каком месте я дурак?)))

Сообщение отредактировал deviljohnson - 2.8.2007, 8:07


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 2.8.2007, 8:32
Сообщение #2


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



название файла - желательно расширение .cpp
при компоновке (линковке) - надо указывать явно используемые быблиотеки (в данном случае это сделано ключами командной строки -lstdc++ -lncurses)
Текст должен выглядеть так:
Код

#include <iostream>
#include <ncurses.h>

using namespace std;

int main(){
cout<<"inspection"<<endl;
getch();
return 0;
};

Строка компиляции и сразу же компоновки в исполняемій файл - так
Код

gcc 1.cpp -lstdc++ -lncurses

Кроме того, что прочел о наличии компилятора - желательно ознакомиться с ним хоть чуть-чуть по документации.
Все необходиміе данные о нем можно найти в интерактивной документации (man gcc) или на домашней странице.
Есть отличия в виндовом и юниховом API - conio - одно из них.
Ну и так далее...
--
Общие принципы:
- вначале читать, потом писать
- все ошибки уже кто-то делал - надо уметь искать
- перед тем, как задавать вопрос - надо поточнее его сформулировать и
-- правильно сформулированный вопрос содержит ответ.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 2.8.2007, 8:42
Сообщение #3


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Читать пока негде, мануалами пользоваться пока не привык,- неудобно. Но это, я надеюсь, временное явление)). Спасибо.


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 18.9.2007, 7:26
Сообщение #4


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



А что делать, если прога, вот такая
Код

#include <stdio.h>
int main(){
  printf("Text");
return 0;
}

компилируется, создается файло a.out, но оно упорно не запускается? Bash пишет "команда не найдена"


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 18.9.2007, 9:49
Сообщение #5


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



ls -l a.out хотя бы для "разминки" указал - и строку запуска wink.gif
--
chmod a+x a.out
./a.out
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 19.9.2007, 7:12
Сообщение #6


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Запустилась))). А где можно прочитать про програмиирование, типа как это делать? Про библиотеки и всё такое. Я пишу, как под маздай- компилятор ругается на все подряд. Типа : cout not member of std и так далее. А ни одной нормальной книги на эту тему я не нашел и в мане про gcc написано только как работает компилятор.


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 19.9.2007, 9:05
Сообщение #7


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



И вот еще: где можно содрать исходник проги типа freecell? Например в аспе она есть, во время установки предлагают поиграть, но исходник- обыскался- не нашел.


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 19.9.2007, 10:36
Сообщение #8


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



маны содержат описание функций
само программирование на С - надо учить по книгам.
Например, Бьерн Страуструп. Язык программирования С++
Цитата
Ее можно считать ключевой в любом собрании книг по С++. Об авторе книги: Бьерн Страуструп является разработчиком языка С++ и создателем первого транслятора.

Исходники всех асповских программ - если у тебя "коробочная версия" - то должны быть на отдельном диске (SRPMS)
или - их можно скачать оттуда же, откуда скачал систему.
Системные пакеты лежат обычно в каталоге RPMS, а пакеты исходников (source rpm) - в каталоге SRPMS
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 19.9.2007, 10:51
Сообщение #9


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Я изучаю по "Эл Стивенс. Самоучитель по С++", хорошая книга, но проблема в том, что несмотря на то, что там написано, что все примеры программ в книге- не зависят от платформы, и должны работать везде, под линуксом это все у меня не компилируется.


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 19.9.2007, 10:56
Сообщение #10


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



пример в студию....
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 19.9.2007, 11:02
Сообщение #11


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Например то, что он ругается почти на все подключаемые библиотеки. Подробнее завтра вывешу.
Код

#include <iostream>
#include <ncurses.h>

using namespace std;

int main(){
cout<<"inspection"<<endl;
getch();
return 0;
};

Здесь ругается на то что сout не является членом std. И если написать std::cout- тоже

Сообщение отредактировал deviljohnson - 19.9.2007, 11:05


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 19.9.2007, 12:07
Сообщение #12


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



странно....
все работает без единого писка...
Код

[ja@afterstep]$ gcc -x c++ 1.c -lstdc++ -lncurses
[ja@afterstep]$ ./a.out
inspection

А теперь - о пользе чтения манов wink.gif
Возможные твои ошибки:
- тип препроцессора6 используемого компилятором - задается по расширению файла. для С++ это .cc .cpp и т.д.
- но - можно "пальцем показать куда плыть" - опция -x c++ прямо указывает компилятору, какой из препроцессоров пользовать.
- словосочетание using namespace std требует "прямого" указания библиотеки libstdc++ - реализуется опцией -lstdc++
- #include <ncurses.h> с последующим использованием каких-то функций с библиотеки ncurses - тоже нуждается в подключении библиотеки - -lncurses
--
Вообще то - лучше тебе освоитьпервоначально Makefile и в дальнейшем пользовать команду make - сильно упростишь мебе разработку wink.gif
например, создадим простенький Makefile:
Код

1:
        gcc -x c++ 1.c -lstdc++ -lncurses -o 1

и для компиляции/сбоки используем команду make
Код

[ja@afterstep]$ make
gcc -x c++ 1.c -lstdc++ -lncurses -o 1
[ja@afterstep Ah]$ ./1
inspection

Как видишь - все хорошо....

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 24.9.2007, 6:55
Сообщение #13


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Попробовал всеми способами, не хочет. Если писать std::cout, пишет что cout not member of std, если просто cout- то cout not declared in this scope.
По поводу острова, написал маленький файл .h, с определением поля и .cpp, который выводит 20х20 символов, завтра создам тему и вывешу их. Но оно выводит текст, а как выводить графику? Скачал 3 книги по программированию под линь,- ни в одной ничего вразумительного...


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 24.9.2007, 8:18
Сообщение #14


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



как "не хочет"?
Давай пошагово - тот текст программы6 что ты дал - условно, будем его называть 1.cpp
- какие ошибки выводит на экран после gcc -c 1.cpp ?
- какие ошибки выводит после gcc 1.cpp -lstdc++ -lncurses -o 1 ?
--
только выдели с екрана - и вставь сообщения полностью.
--
Касаемо GUI - посмотри в сторону QT - учебник в инете есть даже на русском.
Среда разработки (именно под это) - KDevelop - есть в наличии во всех линуховых дистрибутах
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 24.9.2007, 9:53
Сообщение #15


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Цитата
только выдели с екрана - и вставь сообщения полностью.

Завтра принесу))
Цитата
Касаемо GUI - посмотри в сторону QT - учебник в инете есть даже на русском.
Среда разработки (именно под это) - KDevelop - есть в наличии во всех линуховых дистрибутах

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


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 24.9.2007, 9:55
Сообщение #16


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



да - вполне. termcap или curses/ncurses - дают полноту счастья wink.gif
давай наброски - будем смотреть и думать wink.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 25.9.2007, 10:15
Сообщение #17


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Цитата
только выдели с екрана - и вставь сообщения полностью.

Код

[covex@localhost~]$ gcc -x c++ file.c -lstdc++ -lncurses
file.c: in function 'int main()':
file.c: 6: error: 'cout' is not a member of 'std'
[covex@localhost~]$ gcc -x c++ file.c -lstdc++ -lncurses
file.c: in function 'int main()':
file.c: 6: error: 'cout' was not declared in this scope

Первый вариант- это если написать std::cout, второй- если просто cout


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 25.9.2007, 10:28
Сообщение #18


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



опущено (пропущено)
Код
#include <iostream>
- именно это и порождает такую ошибку wink.gif
Код

[ja@afterstep opeople]$ cat 1.cpp
//#include <iostream>
#include <ncurses.h>

using namespace std;

int main(){
cout<<"inspection"<<endl;
getch();
return 0;
};
[ja@afterstep opeople]$ gcc 1.cpp -lncurses -lstdc++
1.cpp: In function ‘int main()’:
1.cpp:7: error: ‘cout’ was not declared in this scope
1.cpp:7: error: ‘endl’ was not declared in this scope
[ja@afterstep opeople]$ vi 1.cpp
[ja@afterstep opeople]$ cat 1.cpp
#include <iostream>
#include <ncurses.h>

using namespace std;

int main(){
cout<<"inspection"<<endl;
getch();
return 0;
};
[ja@afterstep opeople]$ gcc 1.cpp -lncurses -lstdc++
[ja@afterstep opeople]$ ./a.out
inspection
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 25.9.2007, 10:36
Сообщение #19


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Блин, вот это да!))) Проверю вечером, если это так- убью себя головой ап стену.


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 25.9.2007, 11:05
Сообщение #20


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



стену жалко.
В пример заодно вставь инициализацию/деактивацию curses, нарисуй окно, в окне - выведи поле.
Предусмотри цикл управления с клавиатуры: стрелками курсора перемещаешься, пробелом или enter'ом - меняешь состояние клетки.
Возможные состояния - пусто (.), кролик (cool.gif, волк (w), волчица (sw). Соответственно, каждая клетка - эт два экранных знакоместа, а все поле - это массив, где для каждой клетки сохранено ее текущее состояние.
желательно - поле сделать классом - с методами:
set_animal (x, y, who)
get_animal (x,y)
refresh

who - enum none, rabbit, wolf, she_wolf

на еще пример "вдогонку" http://alexber220.narod.ru/ncurses/page2.htm
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 23.5.2012, 2:42