Вызов метода класса из другого метода этого же класса
- Войдите на сайт для отправки комментариев
Втр, 29/05/2018 - 22:57
Здравствуйте, уперся в такую проблемку, нужно в одном из методов класса использовать другой метод. Но синтаксиса я не знаю и найти как то не вышло, наверно не так формулирую. Я так понимаю должно использоватся что то вроде self или this?
class buu { int a; void f1() { a++; } void f2() { f1(); // здесь использовать метод f1 a++; } };
vasya00,можно.Но лучше через внешний обработчик.
#258
Выходт ошибка
error: invalid use of non-static member function
vasya00. Все же упрямитесь . Хорошо читайте серьезную литературу. Могут еще метры начать писать вам тяжелый для вашего понимания текст.
Даа, тут у меня проблема в другом оказывается, это с библиотекой TTimerList.h от DetSimen, не обрабатывается
Если f1 метод класса. Тут скорее вопрос к DetSimen
Спасибо!
Так создайте одиночную функцию-посредник.
void f(){/*а здесь вызов конкретный метод конкретного класса */}
Дак вот дело в том что тут посредник вне класса не поможет, надо как раз чтобы внутри класса это было, без конкретной привязки к экземпляру. Если я правильно выразил мысль..
vasya00. значит вы модель системы не проработали. Ведь методы обработки класса вывести из класса и все. Так что лучше прорабатывайте систему, а не усложняйте, то что не надо усложнять.
Дак вот дело в том что тут посредник вне класса не поможет, надо как раз чтобы внутри класса это было, без конкретной привязки к экземпляру. Если я правильно выразил мысль..
У Деда сделана привязка функции, для того, чтобы метод класса могла быть привязана к дедовской либе - эта метод должен быть объявлен с модификатором static. Однако, статические члены класса ничего не знают о конкретном инстансе класса, соответственно, там никакие this не помогут.
Обычно проблема решается передачей дополнительного параметра (в вашем случае - как раз this) в вызывающую сторону. Вызывающая сторона сохраняет этот параметр, и передаёт вам. В общем случае выглядит это так, применительно к вашему примеру:
Надеюсь, понятно, что происходит: класс SomeClass имеет общий для всех экземпляров статический метод, который ничего не знает про this. Метод bind передаёт вызывающей стороне (экземпляр класса Caller) указатель на функцию и указатель на экземпляр класса SomeClass. Внутри метода callMe класса Caller просто идёт вызов статического метода calle класса SomeClass, при этом ему передаётся параметр (this, который передал вызывающей стороне экземпляр класса SomeClass). Внутри метода doSomething просто выводится значение this, чтобы убедиться, что метод вызывается для разных экземпляров класса.
Как-то так.
Даа, тут у меня проблема в другом оказывается, это с библиотекой TTimerList.h от DetSimen, не обрабатывается
Если f1 метод класса. Тут скорее вопрос к DetSimen
DetSimen тут не поможет. Метод класса нельзя передавать по ссылке, как обычную функцию, поскольку для каждого экземпляра указатель на этот метод будет свой. Единственное исключение - статические методы, их передавать по ссылке можно, о чем вам компилятор и говорит.
Хотите более подробно - вбейте сообщение компилятора в Гугль и почитайте ссылки - например на Stackoverflow (на английском)
Или так
Или так, чтобы уж наверняка ))
Ты не в скаску попал, в С++ делегатов нет нихрена, а указатели на методы это настолько тонкая вещь, што спицца можно.
Давай сделаем простейший отомат управления освещением.
TAnalogSensor - это класс любого аналогового датчика, в данном случае - фоторезистора
TDevice - класс исполнительного механизма, в данном случае - реле включения освещения
Как видишь, таймеры и с классами прекрасно себя чуствуют, чего и мне желают, после вчерашнева.
DetSimen, да но в вашем случае tmrSensorRead не метод класса. Поэтому по таймеру без проблем вызывается. Если например есть множество объектов класса датчиков, и у каждого свое значение PhotoSensor со своим пином подключения и другие свойства, в идеале, нужно методом класса, в "общем виде" включать таймер для каждого конкретного объекта свой, со всеми его свойствами, возможно меняя их при этом. Статический метод тут тоже не подойдет, так как нужен индивидуальный для каждого экземпляра.
В моем случае задумка такая:
DIYMan, как я понял предлогает то что нужно, пытаюсь разобраться...
Акей, канешна. Изучай.
Но в твоей архитектуре - проблема.
DetSimen, возможно, что заметили что не так? Это пока набросок так скажем, в конструкторе будут читаться переменные из конфига, и наверно стоит перейти на опрос датчиков с фиксированным интервалом.. И с вариантом DIYMan, не разобрался, создавать отдельный свой таймер для каждого объекта класса не выйдет хотябы потому что hOnceTimer глобальный и один да и вообще не выходит никак. Думаю может зайти с другой стороны как то..
В моей поделке можно одновременно завести 12 таймеров на разные интервалы (для UNO), для Mega - 16.
Да ваша библиотека крута, обязательно буду использовать ее. За нее отдельное спасибо! И всетаки можно как то организовать использования ее внутри класса, с разными объектами? Или стоит вынести этот таймер "за класс"? Так и не могу толком понять..