簡體   English   中英

C ++ - 將聲明的數組作為參數傳遞給struct

[英]C++ - passing declared array as argument to struct

    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需要一個數組。

我怎么能通過陣列? 我試過傳遞*旋轉,但這只傳遞第一個值。

怎么樣

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

但是,這將花費您的運行時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM