Передается указатель вместо копии

200
11 декабря 2018, 03:50
struct object
{
    std::string name, 
                type = "string", 
                value;
    object() {}
    object(std::string name, std::string value="", std::string type="string")
    {
        this->name = name;
        this->type = type;
        this->value = value;
    }
    object& operator=(std::string _Val)
    {
        value = _Val;
        return (*this);
    }
};
struct Form
{
    uint32_t size;
    object * objects;
    Form() {}
    Form(object objects[], uint32_t size)
    {
        this->size = size;
        this->objects = objects;
    }
};
class Data
{
    uint32_t sizeVal;
public:
    object *objects;
    uint32_t size()
    {return sizeVal;}
    Data(object objects[], uint32_t size)
    {
        this->sizeVal = size;
        this->objects = objects;
    }
    Data(Form form)
    {
        objects = form.objects;
        sizeVal = form.size;
    }
    Data(){}
    ERROR_ID SetValueByID(ID id, std::string value)
    {
        if (id >= sizeVal) return -1;
        objects[id].value = value;
        return 0;
    }
    ERROR_ID SetValueByName(std::string name, std::string value)
    {
        int id = -1;
        for (int i = 0; i < sizeVal; i++)
        {
            if (objects[i].name == name)
            {
                id = i;
                break;
            }
        }
        if (id == -1) return -1;
        objects[id].value = value;
        return 0;
    }
    object& getObjByID(ID id)
    {
        if (id >= sizeVal)
        {
            object error_value;
            return error_value;
        }
        return objects[id];
    }   
    object& getObjByName(std::string name)
    {
        for (int i = 0; i < sizeVal; i++)
        {
            if (objects[i].name == name) return objects[i];
        }
        object error_value;
        return error_value;
    }
};

object x[5] = {object("name"), object("password"), object("secretask"), object("123"), object("124")};
    Form form(x,5);
    DataBase DB(form, "newdb");
    Data user(x, 5), user2(x,5), user3(x, 5);

Почему адрес objects у form, user,user2,user3 одинаковый? И как это исправить?

READ ALSO
C++ WinApi WNDPROC в классе

C++ WinApi WNDPROC в классе

Как поместить WndProc в класс? Как это работает в оконных библиотеках? (например GLFW)Как я понял в windows forms все события это wndproc, но как wndproc помещен...

172
Как в cmake производит поиск библиотек в Windows?

Как в cmake производит поиск библиотек в Windows?

Пишу небольшой кроссплатформенный проект на qt5 + cmake с использованием protobufНа linux всё собирается замечательно но на windows cmake не может выполнит...

185
Инструкция по запуску Tensorflow на opencv

Инструкция по запуску Tensorflow на opencv

Обучили модель tensorflow 15

144