Вы должны попытаться предоставить больше контекста того, что вы хотите сделать и где. Вы можете видеть, что разные ответы интерпретируют ваш код как часть списка инициализации или оператора в теле функции - обе интерпретации допустимы без дополнительного контекста.
Теперь моя интерпретация заключается в том, что вы находитесь внутри функции и хотите, чтобы элемент item
указывал на результат вызова scene.addPixmap(p);
. Если это так, вы должны использовать присваивание.
Проблема, если вы следуете первому блоку, состоит в том, что вы создаете локальную переменную, которая скрывает атрибут участника, и инициализируете его, но это не меняет атрибут члена item
.
Если вы удалите тип из объявления, в области действия не будет локального item
, и компилятор обнаружит, что идентификатор ссылается на атрибут member, что вам и нужно. На этом этапе компилятор интерпретирует строку: *item(param)
как вызов operator()
для атрибута item
и разыменование результата. Поскольку item
является указателем, он не может применить operator()
и выдает сообщение об ошибке: элемент не может использоваться как функция .
Как уже указывали другие, решение заключается в назначении вместо попытки использовать синтаксис инициализации, который доступен только в точке определения для локальных переменных или в списке инициализации для атрибутов элементов.