Как вернуть объект NULL в C++

Я знаю, что это может быть дубликат: Вернуть объект «NULL», если результат поиска не найден

НО, есть что-то другое происходит с моим кодом, потому что звездочка не решает мою проблему, а именно:

Normal Sphere::hit(Ray ray) {
   //stuff is done here
   if(something happens) {
       return NULL;
   }
   //other stuff
   return Normal(something, somethingElse);
}

Но я получаю ошибку, ссылающуюся на возвращаемую строку NULL : требуется преобразование из «int» в несалярный тип «Normal»

И еще одну ошибку и предупреждение о том, что ссылка на последнюю возвращаемую строку: предупреждение: получение адреса временного и преобразование из «Normal *» в некалярийный тип «Normal» запрошено

Я понимаю, почему я получаю это предупреждение, но не знаю, как его исправить. Как вернуть объект Normal в последней строке, которая сохраняется после завершения функции, и как вернуть объект NULL в первый раз? (Если есть термин для этих типов возврата, пожалуйста, дайте мне знать, чтобы я также мог прочитать его подробнее.)

Чтобы прояснить вопрос комментатора, я попробовал следующие вещи:

Я пытался сделать это: Normal * Sphere:: hit (Ray ray) в файле cpp и Normal * hit (Ray ray); в файле заголовка, и я получаю эту ошибку: Ошибка: прототип для «Normal * Sphere:: hit (Ray)» не соответствует ни одному из классов «Sphere»

Я также попробовал это: Нормальная сфера:: * попадание (Ray ray) в файл cpp и Нормальное * попадание (Ray ray); в файл заголовка, и я получаю эту ошибку для второго оператора возврата: не может преобразовать 'Normal *' в 'Normal Sphere:: *' взамен

Дальнейшее разъяснение: Я не спрашиваю о том, как работают указатели. (Это был не главный вопрос.) Меня интересует синтаксис, касающийся указателей на языке C++. Итак, учитывая функцию, которую я указал выше, я понял, что я должен указать возврат указателя, потому что C++ не имеет нулевых объектов. Понял. НО тогда возникает проблема: как должен выглядеть прототип функции? В файле cpp у меня есть то, что предложил Бала (что и было первоначально, но изменил его из-за следующей ошибки):

Normal* Sphere::hit(Ray ray) {
   //stuff is done here
   if(something happens) {
       return NULL;
   }
   //other stuff
   return new Normal(something, somethingElse);
}

В файле заголовка есть Нормальное * попадание (Ray ray) , но я все еще получаю следующее сообщение: прототип для 'Normal * Sphere:: hit (Ray)' не соответствует ни одному из классов 'Sphere' На данный момент мне неясно, почему он не может найти прототип этой функции. Вот файл заголовка:

class Sphere
{
    public:
        Sphere();
        Vector3 center;
        float radius;
        Normal* hit(Ray ray);
};

Может ли кто-нибудь узнать, почему он жалуется, что не существует соответствующего прототипа для хита в классе Сфера ? (Я могу перенести это на отдельный вопрос...)

-121--1098578-

Замена драйвера сенсорного экрана в ядре Android Я адаптирую ядро Gingerbread для моей пользовательской платы. Я пытаюсь заменить резистивный сенсорный экран, который использует on-микросхема контроллера ADC (процессор S5PV210 от Samsung). В моем дизайне мне нужен...

Я адаптирую ядро пряника для моей пользовательской платы. Я пытаюсь заменить резистивный сенсорный экран, который использует встроенный контроллер ADC (S5PV210 процессор от Samsung). В своем дизайне мне нужен емкостный контроллер, поддерживаемый драйвером eGalaxyTouch. Он подключен к USB. Драйвер можно легко включить из меню «make xconfig». Это несколько работает, так как я добавил несколько следов на последовательной консоли, и я вижу его установку во время загрузки ядра, и я вижу, что он установить и удалить себя при подключении/отсоединении USB-кабеля. Но он ничего не делает в пользовательском интерфейсе Android. Это устройство типа HID. Проблема в том, что он не подключается к соответствующему программному обеспечению уровню сенсорного экрана Android. Наверное, я что-то пропустил. Для принудительного подключения этого HID к другому программному уровню, управляющему сенсорным экраном, необходимо вызвать что-либо другое.

Драйверы сенсорного экрана расположены в ядре/драйверы/вход/сенсорный экран. Также существует некоторый прямой код в ядре/драйверах/входе.

Есть подсказки о том, как связать это устройство HID со слоем сенсорного экрана Android? Я смотрю, как они сделали старый резистивный, и это не делается через HID, потому что это «заказное» устройство с ADC интегрированы в ЦП, и он не проходит через USB.

7
задан Idolon 27 September 2011 в 15:29
поделиться