0

memcpy を使用して構造体を埋めたいと思います。

構造体は次のように宣言されます。

struct udtFeatures
{
    vector<unsigned char>ByteFeatures;
};

そして、これは私がバイトを埋めたい場所です:

void clsMapping::FeedFeaturesFromMap(udtFeatures &uFeatures,int uOtherIndex)
{
    int iBytePos=this->Content()[uOtherIndex].ByteStart;
    int iByteCount=this->Content()[uOtherIndex].ByteCount;

    memcpy(uFeatures.ByteFeatures, &((char*)(m_pVoiceData))[iBytePos],iByteCount);
}

しかし、memcpy はこれを好みません。

コンパイラは次のように述べています。

一致する変換関数が見つかりません

std::vector<unsigned char, std::allocator<unsigned char>> in void *.

.ByteFeatures は単なるポインターだからだと思いますか?

どうすればこれを行うことができますか?

4

4 に答える 4

5

.ByteFeatures は単なるポインターだからだと思いますか?

いいえ、それ単なるポインタではないからです。ベクトルです。

どうすればこれを行うことができますか?

ベクトルによって管理される配列へのポインタが必要な場合、それはuFeatures.ByteFeatures.data()または&uFeatures.ByteFeatures[0]です。または、代わりに使用することを検討してくださいstd::copy

どちらの場合でも、ベクトルにコピーする前に、ベクトルが十分に大きいことを確認してください。

于 2013-05-06T11:39:04.920 に答える
0

uFeatures.ByteFeaturesする必要があります&uFeatures.ByteFeatures[0]

于 2013-05-06T12:36:56.180 に答える
0

を初期化するために使用すること可能ですが、お勧めできません。memcpystd::vector

代わりに次を使用しますstd::copy

std::copy(&m_pVoiceData[iBytePos], &m_pVoiceData[iBytePos + iByteCount],
          std::back_inserter(uFeatures.ByteFeatures));
于 2013-05-06T11:38:42.410 に答える
0

memcpystd::vectorを使用して入力することはできません (まあ.. 方法はありますが、そうではないかのように考えたほうがよいでしょう)。自分で使用std::copyまたは記入してください。

于 2013-05-06T11:38:54.237 に答える