Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #70851

Re: invalid use of non-static member function

From "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com>
Newsgroups comp.lang.c++
Subject Re: invalid use of non-static member function
Date 2019-12-31 06:34 +0100
Organization A noiseless patient Spider
Message-ID <quemlp$ggv$1@dont-email.me> (permalink)
References <61205cc8-816c-437b-8128-4fd0d7458fdd@googlegroups.com>

Show all headers | View raw


On 31.12.2019 05:01, Andrew Z wrote:
> hello,
>   im attempting to simplify the C code for arduino/idf framework.
>   the setup_task function worked well until i introduced the Zap class. And now it is failing with :
> [code]
> 
> rc/main.cpp: In function 'void setup()':
> src/main.cpp:112:115: error: invalid use of non-static member function
>    setup_task(outlet.OutletToggleTask, (char*)"Outlet Task", eventGroup, outlet.OutletCallback, outlet.GetCycleTicks);
>                                                                                                                     ^
> In file included from src/main.cpp:19:0:
> 
> [/code]
> 
> I appreciate the guidance and any help since I clearly don't understand what is wrong. I found a similar thread here (https://forum.arduino.cc/index.php?topic=524167.0). But im not sure why there is a need to create such a complex hierarchy...
> 
> simplified code:
> [code]
> main.cpp
> #include <Arduino.h>
> ...
> #include <zap.h>
> #define pdMS_TO_TICKS( xTimeInMs ) (  ( TickType_t ) ( xTimeInMs ) * ( configTICK_RATE_HZ  / ( TickType_t ) 1000 ) )
> const int TIME_BIT = BIT0 ;
> #define DATA_PIN  4
> #define CHANNEL   1
> 
> 
> EventGroupHandle_t eventGroup;
> 
> void setup_task(    void (*DeviceTask)(void*), char* TaskName, EventGroupHandle_t eventGroup,
>                      void (*Callback_Fn)(TimerHandle_t), TickType_t cycle_ticks ) {};

Use `const char*` for C string that's not going to be changed.

It's UB to cast a literal to `char*` and the modify it.


> void setup(){
> 
> 	eventGroup = xEventGroupCreate(); //check if NULL NOT returned.
> 	Zap outlet(DATA_PIN, CHANNEL , 20000); //  make a new outlet instance with
> 	setup_task(outlet.OutletToggleTask, (char*)"Outlet Task", eventGroup, outlet.OutletCallback,

OutletToggleTask is a non-static member function.

As a non-static member function it takes a hidden `this` parameter, 
which might not be passed in the same way as other parameters. Therefore 
you can't convert it to pointer-to-free-function in any portable way.

Additionally the construct `outlet.OutletToggleTask` is a callable 
expression that in itself has no type. It's silly in a very serious way: 
the lack of a type for it is a core language deficiency that stands in 
the way of easily using C++ for e.g. GUI code, or other code that 
requires object oriented callbacks. C# has delegates for this, and the 
C++ standard library has `std::function` and `std::bind`, but it really 
requires core language support for ease of use.

One easy practical solution to your problem is to simply declare the 
function `static` in the class, or make it a free function.


[snip]

- Alf

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

invalid use of non-static member function Andrew Z <formisc@gmail.com> - 2019-12-30 20:01 -0800
  Re: invalid use of non-static member function "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2019-12-31 06:34 +0100
    Re: invalid use of non-static member function Manfred <noname@add.invalid> - 2019-12-31 17:22 +0100
      Re: invalid use of non-static member function Andrew Z <formisc@gmail.com> - 2019-12-31 22:32 -0800
        Re: invalid use of non-static member function Manfred <noname@add.invalid> - 2020-01-01 18:15 +0100
          Re: invalid use of non-static member function Andrew Z <formisc@gmail.com> - 2020-01-01 18:49 -0800
    Re: invalid use of non-static member function Andrew Z <formisc@gmail.com> - 2019-12-31 23:03 -0800
      Re: invalid use of non-static member function "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2020-01-01 22:48 +0100
        Re: invalid use of non-static member function Andrew Z <formisc@gmail.com> - 2020-01-15 07:35 -0800

csiph-web