Gr-modtool cpp generation issue

I am in the process of converting some 3.6 modules to 3.7. So I am
generating new modules then adding the code from the old modules. I have
one module that takes a filename as a parameter so it is declared like
this
in this test module:

testfilename_impl::testfilename_impl(unsigned short printing, unsigned
short print_type, const char *filename).

When I compile I get the error:

/home/sysala/BisonSAT/gr-bs/lib/testfilename_impl.cc:35:63: error:
invalid
conversion from ‘char’ to ‘const char*’ [-fpermissive]
(new testfilename_impl(printing, print_type, *filename));

The fix I found is to get rid of the * in front of the filename in the
above line. Here is the incorrect declaration:

testfilename::make(unsigned short printing, unsigned short 

print_type,
const char *filename)
{
return gnuradio::get_initial_sptr
(new testfilename_impl(printing, print_type, *filename));
}

Here is the corrected one:

testfilename::make(unsigned short printing, unsigned short 

print_type,
const char *filename)
{
return gnuradio::get_initial_sptr
(new testfilename_impl(printing, print_type, filename)); //got
rid
of * here
}

I can repeat this by just generating a simple general module with this
const char *filename parameter. The above declaration is generated by
gr_modtool. So if I move the * to next to the char when I enter
parameters
in gr_modtool add it works fine. So I am not sure if this is poor C++ or
the gr_modtool just slurping up the *filename but I will point out the
file_sink block bundled with gnuradio declares its filename with the *
next
to the parameter name: file_sink::make(size_t itemsize, const char
*filename, bool append).

I am using gnuradio verison 3.7.2.1.

Al

====================
Al Anderson, N0XV
Director, IT Services
Salish Kootenai College
§ 406.275.4833
© 406.214.8292
[email protected]

On 19.05.2015 18:03, Al Anderson wrote:

I can repeat this by just generating a simple general module with this
const char *filename parameter. The above declaration is generated by
gr_modtool. So if I move the * to next to the char when I enter
parameters in gr_modtool add it works fine. So I am not sure if this is
poor C++ or the gr_modtool just slurping up the *filename but I will
point out the file_sink block bundled with gnuradio declares its
filename with the * next to the parameter

Most likely modtool is slurping the *. We rarely have pointers as such
(a better way in this case would anyway be a const std::string &), and
when we use references, the & needs to go away. Maybe that &-removal is
also removing the *.

M

On 20.05.2015 09:07, Martin B. wrote:

when we use references, the & needs to go away. Maybe that &-removal is
also removing the *.

Erm, I got things mixed up here. What I meant was, modtool slurps &'s
correctly, and should also slurp *'s, which it currently doesn’t. Easy
fix, though. I’ll put up a PR ASAP.

M