Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как правильно объявить функцию?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Как правильно объявить функцию?
Имя
Сообщение << Старые топики   Новые топики >>
Как правильно объявить функцию? - 2008-05-31 18:01:42.390000   
quare

Сообщений: 7
Оценки: 0
Присоединился: 2008-05-28 21:45:24.353333
Имею вот такой код:

void mainmenu() { cls(status); cout&lt;&lt;"1. Open database."&lt;&lt;endl; cout&lt;&lt;"2. Exit."&lt;&lt;endl; cout&lt;&lt;endl; cout&lt;&lt;"9. Program info"&lt;&lt;endl; menu = getch(); switch (menu) { case '1': { readdb(); break; } case '2': { exit(1); break; } case '9': { cls(status); [b] info();[/b] } default: { cls(status); mainmenu(); } } } void info() { cout&lt;&lt;"Program was created by quare"; getch(); mainmenu(); }

Ошибка 216`info' undeclared (first use this function)
Как можно исправить? Может сделать опережающее объявление? Рыскал на эту тему, но так и не нашел =)
Post #: 1
RE: Как правильно объявить функцию? - 2008-05-31 18:39:47.633333   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Функция должна быть объялена до её использования. Хакеры, блин……. рыдаю :D:D:D:D:D
Post #: 2
RE: Как правильно объявить функцию? - 2008-05-31 19:25:39.700000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: quare
Имею вот такой код:
[…]
Как можно исправить? Может сделать опережающее объявление? Рыскал на эту тему, но так и не нашел =)

Можно сделать опережающее. Но твой код – бред. У тебя рекурсивный вызов функции mainmenu. Даже два. Один прямой, другой косвенно через info. Оно может и будет работать в большинстве ситуаций, но ровно до тех пор, пока кто-нибудь не начнёт раз за разом нажимать на всякие клавиши клавиатуры отличные от 1 и 2.
В ряде функциональных языков программирования такая рекурсия нормальна, но там компиляторы умные. В C++ же компилятор с таким не справится.
Используй цикл в mainmenu. Убей рекурсию.
Post #: 3
RE: Как правильно объявить функцию? - 2008-05-31 20:03:22.286666   
vvviperrr

Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
ахаха)) rgo жестко откоментил))) звучит как убей рекурсию, спаси планету)))
пс. сорри за оффтоп, не удержался, да и по теме все сказали уже)
Post #: 4
RE: Как правильно объявить функцию? - 2008-05-31 23:27:49.210000   
quare

Сообщений: 7
Оценки: 0
Присоединился: 2008-05-28 21:45:24.353333
Вроде переделал, пока что работет =)
Но все-таки, как в С++ сделать опережающее объявление? В дельфях было forward, а тут что-нить подобное есть? =)
Post #: 5
RE: Как правильно объявить функцию? - 2008-06-01 00:50:52.930000   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Просто пишешь
void info();
Post #: 6
RE: Как правильно объявить функцию? - 2008-06-01 12:06:27.166666   
Absurd

Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666

quote:

ORIGINAL: quare

Вроде переделал, пока что работет =)
Но все-таки, как в С++ сделать опережающее объявление? В дельфях было forward, а тут что-нить подобное есть? =)


static void info(); - внутренняя линковка. Ставится в начале .с/.cpp файла после инклюдов.

extern void info(); - внешняя линковка. Ставится обычно в .h файле, после этого функция становится доступной всему проекту.

Чего-то влом писать чем они отличаются, ищи сам.
Post #: 7
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как правильно объявить функцию?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.