struct init:为char **类型的标量初始值设定括号

问题描述 投票:0回答:2

我有这个结构:

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

并希望使用此代码在其他类的方法中初始化它:

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

但它只给我这个错误:

第3行:错误:在'char **'类型的标量初始值设定项周围括起来

我试过了:

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

但它没有改变任何东西,我也尝试用std :: string相同的结果。

c++ pointers initialization
2个回答
0
投票

我只想要一个包含字符串数组的结构std :: string或char *,我想用STRUCT = {{“1”,“2”,“3”}}来初始化它;或类似的东西。

像这样?

#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;

}

0
投票

这个问题与结构本身无关。

char **inputNeuronType = {"foo", "bar", "baz"};

有同样的问题。

指针是单个值。您不能使用表达式列表来初始化它;你只能将它指向一些已经存在的数组。

但是,如果您真正需要的只是初始化语法,那么std::vector<std::string>就可以正常工作:

#include <string>
#include <vector>

struct NetDescriptor {
    unsigned int inputNeuronCount = 1;
    std::vector<std::string> inputNeuronType;
    unsigned int hiddenNeuronCount = 0;
    std::vector<unsigned int> hiddenNeurons;
    unsigned int outputNeuronCount = 1;
    std::vector<std::string> outputNeuronType;
};

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

此代码Just Works™。

© www.soinside.com 2019 - 2024. All rights reserved.