Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46

Как объявить созданную функцию, чтобы ей пользоваться?

17.01.2016, 03:07. Показов 7802. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал свою функцию, записал в хедере
C++
1
2
void __fastcall TForm1::test(TObject *Sender)
{}
прописал в хедере
C++
1
void __fastcall TForm1::test(TObject *Sender);
Всё компилируется, ошибок не выдаёт. Но, при попытке вставить эту функцию в обработчик действия компонента формы выдаёт
[bcc32 Error] ****.cpp(81): E2235 Member function must be called or its address taken
Записал как
C++
1
&test;
скомпилировалось. Но, функция не работает? Как правильно её записывать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.01.2016, 03:07
Ответы с готовыми решениями:

Как объявить массив чтобы им можно было пользоваться в любом методе?
string lines = File.ReadAllLines("C:/input.txt"); int A = new int.Split(' ').Length]; for (int i = 0; i...

Где объявить переменную, чтобы все процедуры могли ей пользоваться?
Есть старая программа, еще на Turbo Pascal. Там есть две процедуры. Раньше было понятно – нужна переменная – вписал в самом начале, и все с...

Где и как надо объявить функцию, чтобы в её теле не использовалось имя формы?
Всем здравствуйте: В модуле Unit1.cpp стартовой формы Form1 описываю прототип функции: void InitLabel(TForm1 *frm); и её...

25
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.01.2016, 03:21
1. Запрещено на этом форуме создавать ссылки на другой форум
В h-файле объявляешь свою функцию
C++
1
void __fastcall test():
В CPP-файле
Определяешь
C++
1
2
3
4
void __fastcall TForm1::test()
{
  //здесь пишешь что твоя функция должна делать
}
Вызываешь функцию просто вот так:
C++
1
test();
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
17.01.2016, 04:10  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Запрещено на этом форуме создавать ссылки на другой форум
Гм. Давно регистрировался, забыл церемониальные таинства.
При void __fastcall TForm1::test() не пропускает
E2316 '_fastcall TForm1::test()' is not a member of 'TForm1'
При __fastcall test(); пишет тоже самое и вдобавок
[bcc32 Warning] Tach0.cpp(77): W8070 Function should return a value
E2335 Overloaded 'TForm1::test' ambiguous in this context
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2016, 12:03
Цитата Сообщение от Sameman Посмотреть сообщение
E2316 '_fastcall TForm1::test()' is not a member of 'TForm1'
В h-файле функция должна быть объявлена внутри класса TForm1 (для удобства пользования).
C++
1
2
3
4
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
        void __fastcall test();  //  <-- this
0
Модератор
 Аватар для D1973
9920 / 6456 / 2456
Регистрация: 21.01.2014
Сообщений: 27,398
Записей в блоге: 3
17.01.2016, 12:54
Sameman, ну вот примерчик посмотри... Если уж и тут не поймешь - бери и штудируй книжку для чайников...
Вложения
Тип файла: rar tttt.rar (4.4 Кб, 29 просмотров)
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
17.01.2016, 16:22  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
бери и штудируй книжку
При компиляции Вашего примера Юнит1 выдало
[bcc32 Error] Unit1.cpp(22): E2034 Cannot convert 'char const[28]' to 'const wchar_t *'
[bcc32 Error] Unit1.cpp(22): E2342 Type mismatch in parameter 'format' (wanted 'const wchar_t *', got 'const char *')
[bcc32 Warning] Unit1.cpp(28): W8057 Parameter 'Sender' is never used
[bcc32 Warning] Unit1.cpp(33): W8057 Parameter 'Sender' is never used
[bcc32 Warning] Unit1.cpp(38): W8057 Parameter 'Sender' is never used
[bcc32 Error] Unit1.cpp(40): E2040 Declaration terminated incorrectly
[bcc32 Warning] Unit1.cpp(40): W8098 Multi-character character constant
[bcc32 Error] Unit1.cpp(40): E2129 Character constant too long (or empty)
Итого 4 ошибки. Действительно, книжки для чайников очень полезны...
Затем, по 4 ошибки также в Юнит2 и Проект1, уж не стал их и смотреть.
Цитата Сообщение от nick42 Посмотреть сообщение
для удобства пользования
Поправил, выдаёт
[bcc32 Error] ******.cpp(79): E2335 Overloaded 'TForm1::test' ambiguous in this context
Failed
Уже ткните носом в название книжки и номер страницы, кто знает этот Билдер более-менее - как сделать это пребанальнейшее действия, которое должно быть описано если не на первой, так на второй странице учебника по Билдеру??? Компилирую как Релиз программу.
0
Модератор
 Аватар для D1973
9920 / 6456 / 2456
Регистрация: 21.01.2014
Сообщений: 27,398
Записей в блоге: 3
17.01.2016, 17:13
Ну, дык надо было сподобиться хотя бы версию своего Билдера сообщить...
Вложения
Тип файла: rar xe3.rar (82.9 Кб, 15 просмотров)
1
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
17.01.2016, 17:14
Не должно быть таких проблем. Просто воспользуйся примером который предоставил Sasha и все должно работать. Если не поможет, то создай новый проект и снова попробуй сделать по примеру Sasha если снова будут проблемы попробуйте переустановить Builder.
0
Модератор
 Аватар для D1973
9920 / 6456 / 2456
Регистрация: 21.01.2014
Сообщений: 27,398
Записей в блоге: 3
17.01.2016, 17:19
Цитата Сообщение от Sluchayno Посмотреть сообщение
Не должно быть таких проблем.
Должны быть, т.к. проект делал в 6-м билдере, а открывать его пробовали в какой-то RAD-студии...
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
17.01.2016, 17:58
Цитата Сообщение от D1973 Посмотреть сообщение
Должны быть, т.к. проект делал в 6-м билдере, а открывать его пробовали в какой-то RAD-студии...
Не должно быть проблем если делать как написал Sasha. И тут без разницы RAD или билдер. Причем тут твой проект я не знаю...
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
17.01.2016, 18:44  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
надо было сподобиться хотя бы версию своего Билдера сообщить...открывать его пробовали в какой-то RAD-студии
Не успел отредактировать сообщение, 5 минут почему-то даётся на редактирование, хоть бы до первого ответа поправить можно было. Действительно, для вин32 компилирую ХЕ6ым, под Вин7\64. Вставил в форму действия события таймера, работает, но таймер компилятором самостоятельно переименован в test. Но, мне надо в строку вставлять?
C++
1
2
3
4
void __fastcall TForm1::test(TObject *Sender)// Было имя таймер
{
//test                                                                // сюда надо вставлять, произвольно???
}
Есть пример с действиями программы не с компонентами формы?
C++
1
2
3
4
5
{...
...
test; // где-то, что-то делает самостоятельно вне компонентов формы, например, работает с компонентами ВИНАПИ
...
...}
Добавлено через 7 минут
Цитата Сообщение от Sluchayno Посмотреть сообщение
попробуйте переустановить Builde
Ага. Сразу компьютер, тогда уж.

Добавлено через 31 минуту
И, естественно, скомпилировавшись, не работает. Таймер не включается и не выключается под своим старым именем, в других местах - тут, как ни странно, компилятор ошибки не выдаёт, хотя в хедере и следа от таймера не осталось, везде встало "test". При попытке переименовать в "test->Enabled=true;" естественно выдаёт
[bcc32 Error] Tach0.cpp(35): E2335 Overloaded 'TForm1::test' ambiguous in this context
Итого, два компонента с именем "test" в программе и в хедере, хоть и разные на ощупь. Таймера в заголовке нету, но в программе есть и ничего страшного для компилятора. Чудеса прямо. Есть ли какой-нибудь компонент, чтобы ничего не делал? Ну, туда программу вставить и вызывать...
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
17.01.2016, 18:55
Цитата Сообщение от Sameman Посмотреть сообщение
Ага. Сразу компьютер, тогда уж.
Ваш сарказм тут не к чему, если вы посмотрите эту ветку форума, то убедитесь что при некоторых проблемах переустановка Builder помогает их решить.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2016, 19:22
Sameman, да просто нужно работать аккуратней, и вдумчиво. Советы вам в основном давали сведущие программисты и, заметьте, ни у одного нету ника "Сусанин". Если с компонентами возник напряг - удаляйте их в дизайне (не забывая подчищать их обработчики и контролировать h-файл). Потом вновь добавить, но уже без погрешностей. А начнете пороть горячку - вам тогда не форум в помощь а... "люди в белых халатах".
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
17.01.2016, 20:01  [ТС]
Цитата Сообщение от Sluchayno Посмотреть сообщение
при некоторых проблемах
Конкретно? Тут помогло бы? Эта РАД ХЕ6 у меня три!!! часа устанавливалась - если не дольше, вероятно, час пройдёт деинсталляция... И на всякий непонятный её чих переустанавливать её?

Добавлено через 7 минут
Цитата Сообщение от nick42 Посмотреть сообщение
Если с компонентами возник напряг - удаляйте их в дизайне (не забывая подчищать их обработчики и контролировать h-файл).
Вообще, ничего не понял. Про что вы? Описал подробно всё. Вопрос - как объявить программы, для последующего её использования в форме - не виде:
Лейба1->значение=программа; ,
а в виде:
{
....
программа;
....
}
где это тут описано опытными программистами, как это сделать, хоть в учебнике?
Пока только один D1973, уделив время, подумал. Ну, это я виноват, не совсем верно формализовал вопрос.
0
Модератор
 Аватар для D1973
9920 / 6456 / 2456
Регистрация: 21.01.2014
Сообщений: 27,398
Записей в блоге: 3
17.01.2016, 20:02
Цитата Сообщение от Sameman Посмотреть сообщение
Вопрос - как объявить программы, для последующего её использования в форме - не виде:
Лейба1->значение=программа; ,
а в виде:
{
....
программа;
....
}
Вот это вот все - что это??? о чем???
Изначально вопрос звучал так:
Как объявить созданную функцию, чтобы ей пользоваться?
теперь вот это вот что-то непонятное оказалось вопросом...
Не, я или спать так уже хочу, что ничего не понимаю, или что-то еще, но понимания, что сделать надо, все меньше и меньше...
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
17.01.2016, 20:48  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Вот это вот все - что это??? о чем???
Да про использование объявленной функции, в явном виде? По вашему методу переименовывает компонент-носитель этой функции своим именем - использовать невозможно, два компонента получаются под одним именем, пишет;
[bcc32 Error] Tach0.cpp(49): E2335 Overloaded 'TForm1::test' ambiguous in this context
Пробовал дважды, для разных компонентов. void __fastcall TForm1::test(TObject *Sender) стало, а было Буттонклиск - в строку обработки никак не вставляется?
C++
1
2
3
4
5
6
void __fastcall TForm1::Buttonclick1(TObject *Sender)
{
temp=1;
test;
temp=0;
}
Добавлено через 13 минут
У вас строку возвращает лейбе, моя ничего не возвращает?

Добавлено через 9 минут
Странно, всё как надо отрабатывает
C++
1
2
3
4
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 F();
}
Ничего не переименовывает, счётчик крутит - форма2 правильно показывает...
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
17.01.2016, 21:08  [ТС]
Что-то прямо техногенное, было??? Хотя, порой эта РАД ХЕ6 подглючивала - были моменты. Всё заработало... Это же надо, на пустом месте...
Миниатюры
Как объявить созданную функцию, чтобы ей пользоваться?   Как объявить созданную функцию, чтобы ей пользоваться?   Как объявить созданную функцию, чтобы ей пользоваться?  

Как объявить созданную функцию, чтобы ей пользоваться?  
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
17.01.2016, 22:44  [ТС]
Хотя. При удалении выражения со второй картинки - текст с четвёртой, не пропускает? А так, при наличии второго, обрабатывает, как test. Ну и костыли получились, и, вероятно, только для этого конкретного компилятора. Вероятно, нужно было создать кнопку, создать обработчик клика, вставить в него программу, которая нынче в исходном test, и переименовать в test, потом сделать кнопку невидимой и вставлять куда угодно. Вроде и проще - нигде ничего объявлять не надо, но позорней.
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
18.01.2016, 19:28
Цитата Сообщение от Sameman Посмотреть сообщение
Хотя. При удалении выражения со второй картинки - текст с четвёртой, не пропускает? А так, при наличии второго, обрабатывает, как test. Ну и костыли получились, и, вероятно, только для этого конкретного компилятора. Вероятно, нужно было создать кнопку, создать обработчик клика, вставить в него программу, которая нынче в исходном test, и переименовать в test, потом сделать кнопку невидимой и вставлять куда угодно. Вроде и проще - нигде ничего объявлять не надо, но позорней.
Я перестал понимать что тебе нужно.
Если исходить из 1 сообщения то тебе нужно создать функцию и вызвать ее при обработке события нажатия кнопки на форме и при срабатывании таймера.
Вложения
Тип файла: rar Пример.rar (7.57 Мб, 13 просмотров)
0
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
18.01.2016, 21:30  [ТС]
Цитата Сообщение от Sluchayno Посмотреть сообщение
Я перестал понимать что тебе нужно.
Как объявить созданную функцию, чтобы вне кнопочек и лейбочек работала - безо всяких костылей, для её вызова? Прямым вызовом, как например - имя функции одно-единственное в строчке, безо всяких приставочек к её имени?
C++
1
2
3
4
5
6
7
{...
...
ComOpen();
...
ComClose();
....
}
Или, как в вашем примере, в Юните1
C++
1
2
3
{
Close();
}
Покажите, как объявлять должным образом, для именно такого использования?

Добавлено через 5 минут
Впрочем, снёс уже этот Ембаркадеро. И, как страшный сон. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2016, 21:30
Помогаю со студенческими работами здесь

Как на VB (6) объявить экспортируемую функцию в dll-ке, чтобы она была доступна в проекте на C?
Подскажите пожалуйста, как на VB (6) объявить экспортируемую функцию в dll-ке, чтобы она была доступна в проекте на C?

Как Вызвать Созданную Функцию?
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; string first(string); string second(string); int main() { ...

Как сохранить н.сеть созданную в матлабе чтобы использовать из консольного на С?
Подскажите кратко путь. Создал, обучил сеть в матлабе. Хочу вызывать сеть из программы на С, так чтобы сеть была доступна программе без...

Как объявить функцию?
Подскажите, пожалуйста, как функцию function valid(idx) { var el = document.getElementById(idx); var val =...

Как объявить функцию без прототипа
Во всех учебниках пишут, что каждая функция должна иметь прототип. ВОт стало интересно, можно ли объявить функцию, которая не имеет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru