簡體   English   中英

C ++ memcpy:與const void不兼容的雙精度

[英]C++ memcpy: double incompatible with const void

我有一個私人會員

vector<double>m_data_content_joinfeatures;

和一個結構:

struct udtJoinFeatures
{
    double Values[16];
};

我現在想將一些值從m_data_content_joinfeatures復制到udtJoinFeatures的結構中,如下所示:

void clsMapping::FeedJoinFeaturesFromMap(udtJoinFeatures &uJoinFeatures)
{

    unsigned int iByteStartPos=1024; //where the data starts that I want to copy
    unsigned int iByteCount=128; //the number of bytes that I want to copy

    memcpy(&uJoinFeatures.Values[0], m_data_content_joinfeatures[iByteStartPos],iByteCount);
}

但是編譯器告訴我“ double與void *類型的參數不兼容”。

有人可以幫忙嗎? 我不想使用for-next-statement復制我的值。 我想盡可能使用MemCpy,因為我認為這是最快的方法。

謝謝!

memcpy的第二個參數必須是一個地址:

&m_data_content_joinfeatures[iByteStartPos]

另外,名稱iByteStartPos似乎暗示向量中的字節偏移量。 您編寫的代碼(一旦固定為包括& )將從向量中的iByteStartPos double開始復制。 如果您確實想要字節偏移量,則需要將數據開頭轉換為const char *並使用指針算法計算地址:

memcpy(&uJoinFeatures.Values[0],
       reinterpret_cast<const char*>(m_data_content_joinfeatures.data()) + iByteStartPos,
       iByteCount);

但是,一旦您的代碼開始看起來像這樣,最好重新考慮您的策略並放棄基於memcpy和基於字節的索引,而用更安全的高級API(例如std::copy代替它們。

如果您在memcpy處進行循環,則會看到它需要一個指針作為第二個參數,並給它double

就像是:

 memcpy(&uJoinFeatures.Values[0], &m_data_content_joinfeatures[iByteStartPos],iByteCount);
 //                               ^

應該解決這個錯誤。

但是,為什么不使用std::copy呢?

使用С++ 11,您可以

memcpy(&uJoinFeatures.Values[0], m_data_content_joinfeatures.data() + iByteStartPos, iByteCount);

甚至更短

memcpy(uJoinFeatures.Values, m_data_content_joinfeatures.data() + iByteStartPos, iByteCount);

暫無
暫無

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

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