【问题标题】:C++ - passing declared array as argument to structC++ - 将声明的数组作为参数传递给结构
【发布时间】:2019-04-25 00:21:12
【问题描述】:
    float_t rotations[6] = {1.0f, 2.5f, 3.0f, 4.0f, 5.0f, 6.0f};
    fla_algo_config_t config_alt = {20.0f,
                                20.0f,
                                {1.0f, 2.5f, 3.0f, 4.0f, 5.0f, 6.0f},
                                mock_error_callback,
                                nullptr};

    fla_algo_config_t config = {20.0f,
                                20.0f,
                                rotations,
                                mock_error_callback,
                                nullptr};

config_alt 有效。但是,每次我想将整个数组传递给结构时,写出整个数组很麻烦。我想直接传递rotations数组,所以不需要重写。

但是,我收到以下错误:

error: array must be initialized with a brace-enclosed initializer nullptr};

我猜它希望我用大括号括起来旋转。但是,如果我这样做,现在我将传递一个数组数组,但 fla_algo_config_t 需要一个数组。

如何传递数组?我试过传递 *rotations,但这只会传递第一个值。

【问题讨论】:

  • float_t ...[6] 替换为std::array<float_t, 6>(也在fla_algo_config_t 声明中)并想知道您的问题是如何消失的。
  • 很遗憾,我做不到。我无法控制 fla_algo_config_t 声明。
  • 你可以像{rotations[0], rotations[1], rotations[2], ... rotations[5]}一样初始化它。
  • fla_algo_config_t的定义是什么?

标签: c++ arrays struct


【解决方案1】:

怎么样

#define ROTATIONS {1.0f, 2.5f, 3.0f, 4.0f, 5.0f, 6.0f}
fla_algo_config_t config_alt = {20.0f,
                                20.0f,
                                ROTATIONS,
                                mock_error_callback,
                                nullptr};

如果你还需要rotations[],你还是可以的

float_t rotations[6] = ROTATIONS;

如果你想使用初始化列表,你必须使用花括号。参见例如here。 因此,不能只传递rotations,因为它不是初始化列表,而是数组。

如果您不喜欢#define,则另一种选择:

void initFlaAlgoConfig(fla_algo_config_t& config, float_t (&rotations)[6]) // FYI: The 6 should not be hard coded ;)
{
  // or use memcpy()
  for(int i = 0; i < 6; ++i)
  {
    config.thirdMember[i] = rotations[i];
  }
}

然后它可以像这样工作:

float_t rotations[6] = {1.0f, 2.5f, 3.0f, 4.0f, 5.0f, 6.0f};
fla_algo_config_t config = {20.0f,
                            20.0f,
                            {0}, // default, will be overwritten in initFlaAlgoConfig()
                            mock_error_callback,
                            nullptr};
initFlaAlgoConfig(config, rotations);

但是,这会花费您的运行时间。

【讨论】:

    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多