Search code examples
c++pointersinitialization

Struct init: Braces around scalar initializer for type char**


I have this struct:

struct NetDescriptor {
    unsigned int inputNeuronCount = 1;
    char **inputNeuronType = nullptr;
    unsigned int hiddenNeuronCount = 0;
    unsigned int *hiddenNeurons = nullptr;
    unsigned int outputNeuronCount = 1;
    char **outputNeuronType = nullptr;
};

And want to init it in a method of a other class with this code:

NetDescriptor nnDescriptor = {
    3,
    {"EAT\n","FOODL\n","FOODR\n"},
    3,
    {4,4,3},
    3,
    {"EAT\n","MOVEL\n","MOVER\n"}
};

But it only gives me this error:

line 3: error: braces around scalar initializer for type 'char**'

I tried:

{{"EAT\n"},{"FOODL\n"},{"FOODR\n"}},

But it doesnt change anything, i also tried it with std::string same result.


Solution

  • i just want a Structure which contains a array of strings either std::string or char* and i want to init it with STRUCT = { {"1","2","3"}}; or something like this.

    Like this?

    #include <iostream>
    #include <string>
    #include <vector>
    
    struct NetDescriptor
    {
        char const *inputNeuronType[3];
    };
    
    struct NetDescriptorStr
    {
        std::string inputNeuronType[3];
    };
    
    struct NetDescriptorDynamic
    {
        std::vector<std::string> inputNeuronType;
    };
    
    int main()
    {
        NetDescriptor nnDescriptor = { { "EAT\n","FOODL\n","FOODR\n" } };
        std::cout << nnDescriptor.inputNeuronType[1] << std::endl;
    
        NetDescriptorStr nnDescriptorStr = { { "EAT\n","FOODL\n","FOODR\n" } };
        std::cout << nnDescriptorStr.inputNeuronType[1] << std::endl;
    
        NetDescriptorDynamic nnDescriptorDynamic = { { "EAT\n","FOODL\n","FOODR\n","EAT\n","FOODL\n","FOODR\n" } };
        std::cout << nnDescriptorDynamic.inputNeuronType[4] << std::endl;
    
        NetDescriptorDynamic nnDescriptorDynamic2;
        nnDescriptorDynamic2.inputNeuronType.assign({ "EAT\n","FOODL\n","FOODR\n","EAT\n","FOODL\n","FOODR\n" });
        std::cout << nnDescriptorDynamic2.inputNeuronType[4] << std::endl;
    
    }