'memcpy'未在此范围内声明

And*_*993 21 c++ gcc

我正在尝试用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
}
Run Code Online (Sandbox Code Playgroud)

我在每个memcpy和memmove函数上都出错了.

Flo*_*cke 22

你必须要么

using namespace std;
Run Code Online (Sandbox Code Playgroud)

到其他命名空间或你在每个memcpy或memmove执行此操作:

[...]

std::memcpy(  tmp,                buffer,              na*sizeof(T));
Run Code Online (Sandbox Code Playgroud)

[...]

在您的代码中,编译器不知道在哪里查找该函数的定义.如果您使用命名空间,它知道在哪里找到该函数.

此外,不要忘记包含memcpy函数的标题:

#include <cstring>
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记提及正确的`#include`语句. (3认同)
  • 应该是 [`#include &lt;cstring&gt;`](http://en.cppreference.com/w/cpp/string/byte/memcpy) (3认同)
  • OP提到他们已经尝试过了。同样,您不应该在标头中放置“ using namespace”语句。 (2认同)