Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/83: Рейтинг темы: голосов - 83, средняя оценка - 4.93
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1

Cannot find implementation of method Button1Click

27.04.2011, 13:21. Показов 18379. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Эта ошибка появляется тогда, когда пытаюсь перейти к обработчику события OnClick через инспектор объектов. Сама программа при этом запускается без ошибок.

Дело в том, что обработку события OnClick перенес в другой cpp-файл.
Есть ли выход в такой ситуации?

P.S. кнопку и обработку OnClick взял для примера, в реальности в другом cpp находится около 10 обработчиков.
Прошу отвечать конкретно по этой проблеме.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2011, 13:21
Ответы с готовыми решениями:

Ошибка: Cannot find implementation of method
procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=0 to Form1.ComponentCount-1 do begin if...

Ошибка "Cannot find implementation of method DataSource1.DataChange"
Здравствуйте. Столкнулся с такой проблемой: при кампиляции проекта выдаётся ошибка и выделяется строка procedure...

Error: cannot find symbol method
Почему-то ругается на вот эту строчку drawer.addDrawerListener(toggle); И выдает такую ошибку error: cannot find symbol method...

11
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
27.04.2011, 13:45
Скорее всего, потому что, нет объявления функции в заголовочном файле, которому принадлежит данная кнопка
(выход - вручную переходить а не через инспектор)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
27.04.2011, 13:49  [ТС]
Gremlin
В Unit1.h есть объявление. Прикрепил сам проект.
Не удобно вручную переходить
Вложения
Тип файла: rar проблемка.rar (11.4 Кб, 87 просмотров)
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
27.04.2011, 14:14
интересный подход, правда не понял зачем так мучатся, ну да ладно...
инспектор ищет эту функцию в файле где описан класс с его функциями, а это только 2 файла
"Unit1.h и cpp соответственно", а "File1.cpp" отдельный файл, он как бы... чужой получается

(потому что создано событие было Инспектором в Unit1cpp, а вы его перенесли, инспектор уверен что событие должно быть описано в Unit1cpp а там - болт, тот же вариант будет, если создать обработчик например для Buton2 и удалить функцию из цпп файла)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
27.04.2011, 14:22  [ТС]
Подход нужен этот для того, чтобы обработчики не мешались в Unit1.cpp, а находились в другом cpp.
В первом юните у меня объявлены главные обработчики, а во втором второстепенные.
Заставить бы как-нибудь этот инспектор объектов искать обработчики в других cpp файлах...
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
28.04.2011, 00:07
Тебе надо очень внимательно разобраться, что такое заголовочный файл, что такое класс вообще, что такое свойство __published в системе RTTI.

Так, чтобы вызвать у тебя интерес, во всём этом разобраться приведу след. пример, как можно хранить обработчики событий в совершенно другом файле.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//MyEvents.h
#ifndef EVENTS_HPP
#define EVENTS_HPP
#include <Classes.hpp>
// ---------------------------------------------------------------------------
namespace  MyEvents {
       void __fastcall GlobalNotify(void* This, TObject *Sender);
}
// ---------------------------------------------------------------------------
#endif       // EVENTS_HPP
 
// MyEvents.cpp
#include <vcl.h>
#pragma hdrstop
 
#include "MyEvents.h"
 // ---------------------------------------------------------------------------
 #pragma package(smart_init)
 
// ---------------------------------------------------------------------------
namespace  MyEvents {
    void __fastcall GlobalNotify(void* This, TObject *Sender) {
        TComponent *ClickedComponent = dynamic_cast<TComponent *>(Sender);
        if (ClickedComponent) {
            ShowMessage("<" + ClickedComponent->Name + "> was clicked!");
        }
    }
}
 
// Unit1.h
class TForm1 : public TForm {
__published: // IDE-managed Components
 
    TButton *Button1;
    TButton *Button2;
    TButton *Button3;
    TButton *Button4;
    TButton *Button5;
 
    void __fastcall FormCreate(TObject *Sender);
 
private: // User declarations
 
public: // User declarations
    __fastcall TForm1(TComponent* Owner);
};
 
// Unit1.cpp
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "MyEvents.h"
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender) {
    TMethod method;
    method.Data = this;
    method.Code = &MyEvents::GlobalNotify;
    SetMethodProp(Button1, "OnClick", method);
    SetMethodProp(Button2, "OnClick", method);
    SetMethodProp(Button3, "OnClick", method);
    SetMethodProp(Button4, "OnClick", method);
    SetMethodProp(Button5, "OnClick", method);
}
// ---------------------------------------------------------------------------
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
28.04.2011, 07:50  [ТС]
Maluda Попробовал этот способ, но это не то. Мне нужно, как я уже писал, переходить через инспектор объектов к обработчику, находящемуся в другом файле.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
28.04.2011, 11:59
Ещё раз объясняю: есть система RTTI, есть базовый класс TObject,
все объекты, которые являются дочерними от этого класса, могут иметь __published свойства.
Когда ты в инспекторе клацаешь на объект - форма, кнопка, таймер и т.д.,
он получает список всех опубликованных свойств этого объекта. Эти опубликованные свойства есть не что иное, как члены класса.
Теперь дальше, эти опубликованные свойства могут быть разных типов: INTEGER, CLASS, METHOD и т.д.
Все опубликованные свойства-МЕТОДЫ элементов класса при создании автоматом (когда ты два раза клацаешь на свойство-метод и появляется тело функции) должны размещаться в теле КЛАССА-ВЛАДЕЛЬЦА КОМПОНЕНТА.
То есть клацая на кнопку BUTTON1, инспектор определяет, что её OWNER - FORM1,
когда ты выбираешь свойство OnClick, инспектор получает список всех TNotifyEvent методов класса Form1 и предлагает тебе выбрать один из них (выпадающий список) или формирует персональный метод, но он ВСЕГДА БУДЕТ В ТЕЛЕ КЛАССА-ВЛАДЕЛЬЦА.
То есть ты можешь на кнопку Button1 повесить обработчик OnEnter другого компонента, главное,
чтобы это объявление находилось в классе-владельце.
Но если ты хочешь, чтобы описания функций хранились в другом файле, тогда назначение только программно, так как инспектор объектов ничего не знает о твоём подключаемом файле с прототипами функций.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
28.04.2011, 12:54  [ТС]
Maluda Не надо меня учить Мне нужно только решение моей проблемы.
Есть минимальный проект с решением этой проблемы?
Догадываюсь, что решения этой проблемы нету, но в это не верится, т.к. компилятор без проблем находится эти обработчики, а в режиме дизайна не может найти.
Ведь это же серьезный недостаток билдера. Не пойму, как это не предусмотрели.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
28.04.2011, 14:19
Не путай инспектор и компилятор.
Компилятору надо единоразово собрать и забыть,
а инспектору надо постоянно отслеживать за названием метода, за тем, у кого этот метод указан
в свойствах.
Представь, что тело ты разместил в каком-то другом файле.
В инспекторе ты поменял название, а у тебя в проекте 100 файлов,
(ему надо каждый раз пропарсить все эти файлы, найти тело функции и изменить название).
Бедняга Билдер и так тормозит так, что в нём, когда большой проект невозможно работать,
а если ещё и это будет - вообще ляжет.

Выход здесь один - ждать, когда VisualAssist для Билдера сделают
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
28.04.2011, 15:29  [ТС]
Хотя бы предусмотрели возможность указать каким-то образом билдеру, чтобы помимо главного юнита искал в другом указанном файле...
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
29.04.2011, 16:46
Оказывается можно находить тело функции и в другом файле. Единственное, это надо делать в Class Explorer. Я работаю в CBuilder 2010 и не знаю, есть ли он в пред.версиях.
В общем, в 2010 это делается так:
- жмёшь Ctrl + '-'
- находишь свой класс, где функция объявлена, она появляется в TreeView слева,
два раза щёлкаешь на неё и автоматом переход в этот файл, и в эту функцию

-можно найти там по поиску названия этой функции

Если честно, до этого сам не знал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.04.2011, 16:46
Помогаю со студенческими работами здесь

Recordset method Find. Поиск по нескольким условиям
Привет, All! Опять я с проблемой, не получается без нее приходить... Кто использовал метод Find объекта Recordset? Вопрос может и...

Graphics.SetClip Method (GraphicsPath) и Graphics.Clear Method vs Graphics.FillPath Method (System.Drawing)
У нас два способа залить форму: 1. Graphics.SetClip Method (GraphicsPath) and Graphics.Clear 2. Graphics.FillPath Method...

Ошибка "Could not find source location to add method <...> "END." or INITIALIZATION not found in unit source"
Помогите пожалуйста какого значение ошибки Could not find source location to add method Button3.Click. &quot;END.&quot; or INITIALIZATION...

Cannot convert method group 'to_get' to non-delegate type 'int'. Did you intend to invoke the method?
При обращении в методе объекта к методу объекта другого класса, вываливается такая ошибка. Причём код всёравно работает без косяков ...

[Warning] Unit1.pas(57): Method 'WndProc' hides virtual method of base type 'TCustomForm'
Как исправить procedure WndProc (var Msg: TMsg; var Handled:boolean); чтобы не было предупреждения Unit1.pas(57): Method 'WndProc' hides...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru