Получение адреса сконструированного элемента / члена в C ++ - PullRequest
0 голосов
/ 04 августа 2020

Я пишу часть клиентской базы данных, которая занимается привлечением новых клиентов и продажей им товаров. В «Customer.h» у меня есть структура:

struct Customer {
    String name;
    int bottles;
    Customer(String);
    Customer(void) { name = "__invalid__"; }
};

У меня есть класс в файле «CustomerDB.h»

class CustomerDB {
private:
    Customer* data; // an array of Customer objects (allocated on the heap)
    int capacity; // size of the array on the heap
    int length; // number of valid customers actually in the array

public:
    CustomerDB(void);

В «CustomerDB» есть конструктор. cpp "

Customer::Customer(string name) {
    this->bottles = 0;
    this->name = name;
}

Я создаю * объект в другой функции (которая находится в« CustomerDB. cpp »)

Customer& CustomerDB::operator[](string name) {
     Customer Customer(name); 
     return Customer;

И есть объект CustomerDB:

CustomerDB database; (который находится в другом cpp файле, который обрабатывает покупки).

Строковый ввод работает. Объект создан. Там нет никаких проблем. Итак, у меня есть 2 проблемы, одна из которых связана с другой.

  1. Мне нужно создать новый объект нелокального клиента в этой функции (хранится в нелокальной базе данных) и
  2. Верните ссылку на него. Но конструктор, который я только что вызвал, не дает мне ссылки. Он просто делает это так, как надо. Я непреднамеренно создаю локальный объект вместо того, который добавлен в «основную» базу данных. В результате в ссылке нет ничего полезного.

Если я попробую return Customer;, будет написано, что «Клиент не ссылается на значение».

Любая помощь / совет приветствуются .

1 Ответ

2 голосов
/ 04 августа 2020

Мне нужно вернуть адрес этого только что созданного Клиента

Нет, вам нужно вернуть ссылку на него.

но конструктор I только что вызванный

Вы никогда не вызываете конструкторы. Вы объявили объект.

не дает мне адреса. Как мне найти / получить этого нового клиента и вернуть его адрес?

Вы берете адрес объекта следующим образом:

return &Customer;

Но чтобы вернуть ссылку, это просто :

return Customer;

Но это не сработает!

Вы вернете ссылку на локальную переменную. Он собирается go выйти за рамки, оставляя ссылку висящей.

Итак, вам нужно пересмотреть свой выбор с этим дизайном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...