не удалось преобразовать '0l' из 'long int' в 'MemoryManager' - PullRequest
0 голосов
/ 13 декабря 2011
MemoryManager openMemory() {
  if (...) {
    return memory_manager_instance;
  }
  else 
    return NULL;
}

MemoryManager - это имя определенного пользователем класса C ++.Приведенное выше определение функции дает мне ошибку в заголовке.

По сути, я не хочу возвращать экземпляр, когда условие не выполняется.Такое определение функции действительно и то, что я обычно делаю в Java, но, похоже, не работает в C ++.Что я должен сделать, чтобы заняться этим?

1 Ответ

6 голосов
/ 13 декабря 2011

Пусть ваша функция вернет MemoryManager * (возможно, с использованием одного из нескольких классов интеллектуальных указателей, доступных в библиотеке C ++ или в boost). Если MemoryManager является именем класса, то эта функция в письменном виде возвращает копию memory_manager_instance. Это отличается от Java, где переменная типа MemoryManager будет ссылкой на объект.

РЕДАКТИРОВАТЬ: Кроме того, похоже, что вы пытаетесь реализовать синглтон. Вы бы хотели сделать конструктор по умолчанию, конструктор копирования и оператор присваивания для MemoryManager закрытым или защищенным. Первые два также на Java, но не последние!

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