#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)