Итак, у меня есть следующий код, упрощенная версия того, что я хочу сделать. У меня есть класс с переменной-членом, который я хочу установить для потенциально различных типов данных, в зависимости от ситуации (я просто сделал случайную структуру для этого теста). Тем не менее, я все-таки получаю seg-ошибки в функции memcpy, и я понятия не имею, почему.Почему эта memcpy не работает?
#include <cstdlib>
#include <iostream>
#include <assert.h>
#include <string>
#include <string.h>
#include <stdio.h>
using namespace std;
struct product
{
int price;
string name;
};
class object
{
public:
void setData(void *ptr);
void* data;
};
void object::setData(void *ptr)
{
assert(ptr);
memcpy(data, ptr, sizeof(ptr));
}
int main()
{
product* bag;
product ba;
bag = &ba;
bag->price = 5;
bag->name = "bag";
object test;
test.setData(bag);
cout<<test.data->name<<endl;
return 0;
}
'sizeof (ptr)' ???? Что вы ожидаете от этого? –
Кроме того, вы не можете просто «memcpy» создать строковый объект. –
И даже если вы правильно задали 'sizeof', вы не можете использовать' memcpy' для не-POD-типов, например, ваш класс 'product'. – PaulMcKenzie