У меня есть следующий код (какой-то код удален, чтобы разделить его до самого необходимого; пара используемых методов / атрибутов должна быть самоочевидной):
void testApp::togglePalette(){
GraphicalEntity* palette= this->getEntityByName("palette-picker");
cerr << palette << endl;
}
GraphicalEntity* testApp::getEntityByName(string name){
list<GraphicalEntity*>::iterator j;
for(j=screenEntities.begin(); j!=screenEntities.end();++j){
if ((*j)->getTypetag() == name){
cerr << *j << endl;
return *j;
}
}
}
Что выводит следующее:
0x54bda0
0
Я в замешательстве - почему palette
в togglePalette()
не совпадает с адресом, возвращаемым из getEntityByName
(то есть 0x54bda0 в текущем случае), а 0
?
Спасибо!
РЕДАКТИРОВАТЬ: Как Фред указал в одном из своих комментариев, это был действительно вопрос о том, что компилятор был сбит с толку кодом, достигающим конца функции без возврата чего-либо.
Добавление:
return (GraphicalEntity*) NULL;
в конце моего getEntityByName
метода решил проблему. Большое спасибо!
Меня все еще смущает, почему метод возвращает 0
, даже если объект найден (как в том, как я реализую свой код, известно, что всегда найдется что-то найденное), хотя - любое объяснение этого будет более чем приветствоваться!