Probably you’ve fallen prey to the common academic practice of including “using namespace std” in your code. In industry, it’s not as common (I don’t allow it in my projects).
std::byte is a new type in C++17. If you aren’t using that new of a compiler (or didn’t set the required standard in your CMakeLists.txt file), it won’t be supported. Try replacing byte with std::byte and never ever write “using namespace std” ever again. If that doesn’t work, make sure you enabled C++17 (see https://crascit.com/2015/03/28/enabling-cxx11-in-cmake/). --- Jim Melton From: Discuss-gnuradio <discuss-gnuradio-bounces+jim.melton=sncorp....@gnu.org> On Behalf Of Mario Moran Sent: Monday, November 8, 2021 15:06 To: discuss-gnuradio@gnu.org Subject: [EXTERNAL] Creating my own Random Source Good afternoon, I know there is already a Random Source, but my advisor would like me to create my own out of tree modules and use them in a flowgraph. So, I am creating my own block, here are my steps so everyone can see what I have done. gr_modtool newmod Random gr_modtool add my_Random_Byte_Source Block Type: Source Language: Cpp No arguments(Side note I might redo this and make arguments but for now it will be specific for one need) Add python QA code: n Add C++ QA code: y I then opened the my_Random_Byte_Source_impl.cc file and added: #include <gnuradio/random.h> /* * The private constructor */ my_Random_Byte_Source_impl::my_Random_Byte_Source_impl() : gr::sync_block("my_Random_Byte_Source", gr::io_signature::make(0, 0, 0), gr::io_signature::make(1, 1, sizeof(byte))) {} unsigned byte my_Random_Byte_Source_impl::get_bytes(const byte &sample) { return gr::random::random(0,0,4) } int my_Random_Byte_Source_impl::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { byte *out = (byte *) output_items[0]; for(int i = 0; i < noutput_items; i++) { out[i] = get_bytes(i) } // Tell runtime system how many output items we produced. return noutput_items; } Then in the yml file I changed it up to be: id: Random_my_Random_Byte_Source label: my_Random_Byte_Source category: '[Random]' templates: imports: import Random make: Random.my_Random_Byte_Source() outputs: - label: out dtype: byte # 'file_format' specifies the version of the GRC yml format used in the file # and should usually not be changed. file_format: 1 Now, I created the build directory and used cmake -DCMAKE_INSTALL_PREFIX=/home/mariom/prefix-3.8/ .. and it was able to complete this but it failed the make install. Here is the error: /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc: In constructor ‘gr::Random::my_Random_Byte_Source_impl::my_Random_Byte_Source_impl()’: /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:46:51: error: ‘byte’ was not declared in this scope 46 | gr::io_signature::make(1, 1, sizeof(byte))) | ^~~~ /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc: At global scope: /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:57:5: error: expected initializer before ‘my_Random_Byte_Source_impl’ 57 | my_Random_Byte_Source_impl::get_bytes(const byte &sample) | ^~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc: In member function ‘virtual int gr::Random::my_Random_Byte_Source_impl::work(int, gr_vector_const_void_star&, gr_vector_void_star&)’: /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:67:7: error: ‘byte’ was not declared in this scope 67 | byte *out = (byte *) output_items[0]; | ^~~~ /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:67:13: error: ‘out’ was not declared in this scope 67 | byte *out = (byte *) output_items[0]; | ^~~ /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:67:26: error: expected primary-expression before ‘)’ token 67 | byte *out = (byte *) output_items[0]; | ^ /home/mariom/gr-Random/lib/my_Random_Byte_Source_impl.cc:71:24: error: ‘get_bytes’ was not declared in this scope 71 | out[i] = get_bytes(i) | ^~~~~~~~~ make[2]: *** [lib/CMakeFiles/gnuradio-Random.dir/build.make:63: lib/CMakeFiles/gnuradio-Random.dir/my_Random_Byte_Source_impl.cc.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:301: lib/CMakeFiles/gnuradio-Random.dir/all] Error 2 make: *** [Makefile:141: all] Error 2 So, I know it doesn't like byte but I'm not sure why. I know when I did the tutorial I did gr_complex and I thought gr_byte would work but it did not so I tried the byte by itself but it still did not work. So, I imagine that the problem is there but is there anything I did wrong? How can I fix this? Please and thank you for your help everyone. P.S. I am using ubuntu 20.04, gnuradio 3.8.4.0, and I installed it using pybombs which is why I used cmake -DCMAKE_INTSALL_PREFIX=/home/mariom/prefix-3.8/ .. CONFIDENTIALITY NOTICE - SNC EMAIL: This email and any attachments are confidential, may contain proprietary, protected, or export controlled information, and are intended for the use of the intended recipients only. Any review, reliance, distribution, disclosure, or forwarding of this email and/or attachments outside of Sierra Nevada Corporation (SNC) without express written approval of the sender, except to the extent required to further properly approved SNC business purposes, is strictly prohibited. If you are not the intended recipient of this email, please notify the sender immediately, and delete all copies without reading, printing, or saving in any manner. --- Thank You.