C ++ - передача объявленного массива в качестве аргумента в структуру - PullRequest
0 голосов
/ 25 апреля 2019
    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 ожидает массив.

Как я могу передать массив?Я пытался передать * повороты, но это только первое значение.

1 Ответ

0 голосов
/ 25 апреля 2019

Как насчет

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

Если вы хотите использовать список инициализации, вам необходимо использовать фигурные скобки. Смотрите, например здесь . Следовательно, вы не можете просто передать 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);

Однако, это будет стоить вам времени выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...