NULL
в C ++ - это целочисленная константа.Преобразование указателя неявно в соответствующих контекстах, но это не так.Вам нужно привести в явном виде:
std::find(dependent_events.begin(), dependent_events.end(), static_cast<P>(0));
Где P
- соответствующий тип указателей в коллекции.В качестве альтернативы, Эдди правильно указал решение C ++ 11, которое должно работать в современных компиляторах (если включен C ++ 11).
Причина, по которой простой NULL
не работаетзаключается в следующем: C ++ запрещает неявное преобразование целого числа в указатель.Существует только одно исключение: буквальное значение 0
обрабатывается как нулевой указатель при инициализации и присваиваниях указателям (литерал 0
действует как «константа нулевого указателя», §4.10) и NULL
это просто 0
(§18.1.4).
Но при использовании в создании экземпляра шаблона (например, в приведенном выше вызове find
), C ++ должен выводить тип шаблона для каждого изего параметры и тип, выведенный для 0
, равен , всегда один и тот же : int
.Так что find
вызывается с аргументом int
(который внутри функции больше не является литерал ) и, как упоминалось выше, не существует неявного преобразования между int
и указателем.