using namespace std;
указывает компилятору искать недекорированные имена (т. Е. Имена без ::
s) в std
, а также в корневом пространстве имен. Теперь tolower
, который вы просматриваете, является частью библиотеки C и, следовательно, находится в корневом пространстве имен, которое всегда находится в пути поиска, но на него также можно явно ссылаться с помощью ::tolower
.
Существует также std::tolower
, который принимает два параметра. Когда у вас есть using namespace std;
и вы пытаетесь использовать tolower
, компилятор не знает, что вы имеете в виду, и поэтому «становится ошибкой».
Таким образом, вам нужно использовать ::tolower
, чтобы указать, что вы хотите использовать его в корневом пространстве имен.
Это, кстати, пример того, почему using namespace std;
может быть плохой идеей. В std
достаточно случайных вещей (а C ++ 0x добавляет больше!), Что вполне вероятно, что могут возникнуть конфликты имен. Я бы порекомендовал вам не использовать using namespace std;
, а использовать явно, например. using std::transform;
конкретно.