| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Определение функции как ПОТОМ |
| Автор: Vetos 16.12.2007, 23:43 | ||
Я хотел бы узнать как сделать чтоб функция была описана дальше по коду а её можно было вызвать раньше чем она описана, извините за такое выражение мыслей.Вот типа того:
Просто выдает ошибку что [C++ Error] Main.cpp(67): E2303 Type name expected. Может есть какоето зарезервированное слово? Помогите Plz |
| Автор: archimed7592 16.12.2007, 23:46 | ||
|
| Автор: Vetos 16.12.2007, 23:49 |
| А если это касается классов? |
| Автор: baldina 16.12.2007, 23:51 | ||
С классами чуть сложнее, опережающее объявление класса class X; покатит только когда не обязательно знать размер класса. |
| Автор: Vetos 16.12.2007, 23:58 |
| А если этот класс еще и является наследником другого класса? |
| Автор: archimed7592 17.12.2007, 00:00 |
Точно так же. |
| Автор: Vetos 17.12.2007, 00:04 |
| Пишет что не может компилятор не создал конструктор по умолчанию ну вот короче: [C++ Error] Main.cpp(79): E2125 Compiler could not generate default constructor for class 'Cos' Че делать |
| Автор: archimed7592 17.12.2007, 00:05 |
Снимать штаны и бегать. Добавлено через 9 секунд Код покажи. |
| Автор: JackYF 17.12.2007, 00:06 |
код показать. Добавлено через 32 секунды |
| Автор: baldina 17.12.2007, 00:07 |
| В таком объявлении переменной A* a (равно как и в опережающем объявлении class A;) неважно, является ли он чьим то наследником. Для размещения указателя (или, например, объявления typedef) компилятору не требуется знать иерархию наследования. |
| Автор: Vetos 17.12.2007, 00:09 | ||||
| Ну хорошо только зря вы так, Мне не сложно но там просто кода дофига
Вот
Тут просто ситуация другая я вообще кое как разобрался и написал вот эту прогу, так все работает прога считает формулы и находит производные, теперь надо добать синус и косинус, а производные их противоположны вот и возникла эта проблемка и приходится обращатся за помощью |
| Автор: baldina 17.12.2007, 00:12 |
| У тебя уже есть конструктор. Поэтому (по стандарту) компилятор конструктор без параметров не генерит. И не может создать переменную без параметров имеющегося конструктора. |
| Автор: Vetos 17.12.2007, 00:15 |
| Где и как это исправить? |
| Автор: baldina 17.12.2007, 00:16 | ||
вот тут
невозможно создать экземпляр Cos т.к. не вызывается имеющийся конструктор TElement. Точнее - компилятор не может сгенерить конструктор по умолчанию для Cos, потому что для этого надо вызвать конструктор по умолчанию TElement, которого не существует |
| Автор: Vetos 17.12.2007, 00:25 | ||||
| так мне надо конструктор туда для Cos написать или для TElement. я просто уже запутался, помоги разобраться. Если у TElement нет конструктора то что тогда вот это:
пробовал так сделать:
Тогда возникает масса ошибок, и получается что надо переписать весь класс, что мне делать |
| Автор: archimed7592 17.12.2007, 09:43 |
| Vetos, попробем с другой стороны: ни чего надо, а чего ты хочешь? Смотри, когда ты пишешь TElement myElement(L, R); , то создаётся экземпляр класса TElement с соответствующими значениями L и R. Когда же ты пишешь TElement myDefaultElement; то ты не указываешь значения L и R. Компилятор на это и ругается. Собственно вопрос: какие значения L и R ты в этом случае подразумеваешь? |
| Автор: baldina 17.12.2007, 09:51 | ||
| Проблема как раз в том что у TElement есть конструктор TElement (TElement*,TElement*), поэтому компилятор не создаёт конструктор TElement() без параметров. Тебе надо либо завести конструктор для TElement без аргументов, что-то типа
либо завести конструктор Cos (), который вызывает TElement (TElement*,TElement*). Судя по вот этому вызову new Cos(x,n) все-таки у тебя должен быть конструктор для Cos с аргументами. Похоже ты класс Cos просто не доделал. |
| Автор: Vetos 17.12.2007, 17:37 |
| Мда, я понял, но все же что-то не то. А я могу кусок написать в одном месте а другой кусок в другом, если нет, то получается что эта проблема нерешаема. Просто дальше мне нужно будет вызвать Sin, и чо, опять его переписать перед Cos, и так по циклу, ну как то же должно решатся такое. |
| Автор: Vetos 17.12.2007, 17:52 |
| Ну вот, переписал кусочек Cos перед Sin. Тех ошибок уже нет, но когда компилятор натыкается на второй Cos то сразу ошибочка: [C++ Error] Main.cpp(88): E2238 Multiple declaration for 'Cos' |
| Автор: archimed7592 17.12.2007, 17:57 | ||
Vetos, привожу простой пример. Если не поймёшь - иди читать книгу.
|
| Автор: baldina 17.12.2007, 18:05 | ||
Vetos, это не именинный пирог. Есть правила. archimed7592 тебе правильный пример привел. Сначала делаешь все объявления (обычно их в отдельный файл .h помещают), потом - реализацию (обычно в отдельном .cpp) Там, где используешь эти классы, тебе нужны только объявления, т.е. надо включить .h - в том числе в файле реализации. |
| Автор: Vetos 17.12.2007, 18:09 |
| А в одном проекте никак нельзя реализовать? Просто с си я не дружу, больше с дельфями, поэтому не смогу сделать так :( Добавлено через 11 минут и 53 секунды Sorry, упустил из виду сообщение archimed7592'а, все работает, значит в си тоже можно приводить описание функции, а её тело писать потом. Просто за долгие годы так привык к Дельфе, что теперь трудновасто с синтаксисом в сях, все делаю по методичке, а там таких примеров нет) БОЛЬШОЕ СПАСИБО ВСЕМ КТО ПОМОГАЛ |