1. ホーム
  2. c++

[解決済み] 'memcpy' はこのスコープで宣言されていません。

2022-04-17 18:05:18

質問

gccとeclipseを使って、オープンソースのc++ライブラリをビルドしようとしています。 しかし、次のようなエラーが発生します。 memcpy' はこのスコープで宣言されていません。

memory.h(とstring.h)をインクルードしようとして、eclipseは "宣言を開く"をクリックすると関数を見つけましたが、gccは私にエラーを与えました。

どうすればいいのでしょうか?

#include <algorithm>
#include <memory.h>

namespace rosic
{
   //etc etc
template <class T>
  void circularShift(T *buffer, int length, int numPositions)
  {
    int na = abs(numPositions);
    while( na > length )
      na -=length;
    T *tmp = new T[na];
    if( numPositions < 0 )
    {

      memcpy(  tmp,                buffer,              na*sizeof(T));
      memmove( buffer,            &buffer[na], (length-na)*sizeof(T));
      memcpy( &buffer[length-na],  tmp,                 na*sizeof(T));
    }
    else if( numPositions > 0 )
    {
      memcpy(  tmp,        &buffer[length-na],          na*sizeof(T));
      memmove(&buffer[na],  buffer,            (length-na)*sizeof(T));
      memcpy(  buffer,      tmp,                        na*sizeof(T));
    }
    delete[] tmp;
  }

//etc etc
}

memcpyとmemmoveの各関数でエラーが発生します。

どうすればいいですか?

のどちらかを入れる必要があります。

using namespace std;

を他のネームスペースに移すか、memcpyやmemmoveのたびにこれを行います。

[...]

std::memcpy(  tmp,                buffer,              na*sizeof(T));

[...]

名前空間を使えば、コンパイラはその関数の定義がどこにあるのかを知っています。

さらに、memcpy関数のヘッダを含めることを忘れないでください。

#include <cstring>