Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Group of structured binding errors, pertains to neural networking

so i downloaded a library that hasnt been in use in years, for Neural Evolutionary Augmenting Topologies. Basically, a neural network that evolves. It came with many, MANY errors out of the box (somewhere around 20-30) and i managed to fix them all, except for these:

Error C3694 a structured binding declaration can contain no specifiers other than ‘static’, ‘thread_local’, ‘auto’, and cv-qualifiers

Error (active) E2828 type "float" has no components to bind to

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Error (active) E0413 no suitable conversion function from "const std::tuple<float, float, float>" to "float" exists //this is dataset

Error (active) E2825 invalid specifier for structured binding declaration

this is the code where the errors are:


const int x1 = 1;
const int x2 = 2;
const int y = 1;

static constexpr int NumInput = 2;
static constexpr int NumOutput = 1;
static constexpr bool Bias = true;
static constexpr float ThresholdFitness = 0.80f;
static constexpr std::size_t PopulationSize = 100;
using ParamConfig = EvolutionNet::DefaultParamConfig;
using EvolutionNetT = EvolutionNet::EvolutionNet<NumInput, NumOutput, Bias, ParamConfig>;
using Network = EvolutionNetT::NetworkT;
using FitnessScore = EvolutionNet::FitnessScore;



for (float&& [x1, x2, y] : dataset) { // const auto, where all the errors are
                network->setInputValue(0, x1);
                network->setInputValue(1, x2);

                network->feedForward<ParamConfig>();

                const float output = network->getOutputValue(0);
                assert(output >= 0.f && output <= 1.f);

                score += 1.f - (std::abs(output - y));
            }

i dont know anything about structured binding, im just trying to be able to use some Neural Networking for other projects. This thing isn’t the best documented, but i believe that
this is only meant to be a for each loop, unless structured binding has something to do with that. How would one fix these errors? thank you.

>Solution :

As the error message says only the auto type specifier (and cv-qualifiers) is allowed in a structured binding, so replace float&& with auto&&.

If you are uncomfortable with this syntax, you don’t need to use it though. It is purely syntactical sugar. You can access the values of the individual elements of a std::tuple with std::get, e.g.:

for(auto entry : dataset) {
    auto x1 = std::get<0>(entry);
    auto x2 = std::get<1>(entry);
    auto y = std::get<2>(entry);
    //...
}

Or instead of auto you can write out the types if you like to. If you want references to the elements in the tuple instead of just their values, add &&/&/const where appropriate.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading