‘memcpy’ не определен в этой области

#c #linux #memcpy

#c #linux #memcpy

Вопрос:

Я получаю сообщение «memcpy не определен в этой области ошибка» со следующим фрагментом кода:

 CommonSessionMessage::CommonSessionMessage(const char* data, int size) 
    : m_data(new char[size]) {
  memcpy(m_data.get(), data, size);
}
  

Я просмотрел этот сайт и Google и не смог найти решения, которое решило бы проблему за меня.

Будем признательны за любую помощь.

Спасибо.

Комментарии:

1. @George: memcpy находится в <cstring> .

2. хм, да, вы правы. Моя ошибка.

Ответ №1:

Включали ли вы string.h / cstring (или другой заголовок, который включает его) в начало вашего файла кода?

Ответ №2:

 #include <cstring>

CommonSessionMessage::CommonSessionMessage(const char* data, int size) 
: m_data(new char[size]) 
{
    std::memcpy(m_data, data, size);
}
  

Кажется, что это m_data является char* типом. Если это так, то у него нет get() функции, и m_data.get() в вашем коде это не имело бы смысла.


Альтернативным решением было бы использовать std::copy как :

 #include<algorithm>

CommonSessionMessage::CommonSessionMessage(const char* data, int size) 
: m_data(new char[size]) 
{
    std::copy(data, data   size, m_data);
}
  

Я бы предпочел второе решение. Прочитайте документацию std::copy .

Комментарии:

1. Извините, для этого я использую boost::scope_array. Но позвольте мне попробовать, и я вернусь к вам. Спасибо.

2. Откуда вы знаете, m_data имеет get() ли функция? Мы не знаем его тип; мы знаем только, что он преобразуется в char* .

Ответ №3:

У меня была такая же проблема (в файле заголовка), даже со всеми включенными правильными путями. Оказалось, что у имени моего файла не было расширения. Переименование его из «array» в «array.hpp» решило проблему для меня. Глупая ошибка … легко исправить.

(Я запускаю версию Eclipse: Juno Service Release 1, идентификатор сборки: 20120920-0800 в Mac OS X 10.6.8)