Ответ 1
Включили ли вы стандартные файлы заголовков? В противном случае компилятор не знает о namespace std
.
Пожалуйста, напишите больше кода, чтобы уточнить.
В Xcode с использованием LLVM 2.0, когда я помещаю строку using namespace std;
в свой код на С++, я получаю это предупреждение:
Семантическая проблема
Использование директивы относится к неявно определенному пространству имен 'std'
Есть ли способ исправить это? Почему это предупреждение?
Включили ли вы стандартные файлы заголовков? В противном случае компилятор не знает о namespace std
.
Пожалуйста, напишите больше кода, чтобы уточнить.
Я решил эту проблему, подобную этой
#include <iostream>
using namespace std;
/// This function is used to ensure that a floating point number is
/// not a NaN or infinity.
inline bool b2IsValid(float32 x)
{
if (x != x)
{
// NaN.
return false;
}
float32 infinity = std::numeric_limits <float32>::infinity();
return -infinity < x && x < infinity;
return true;
}
Перемещение пространства имен using std после #include может исключить это предупреждение.
Я вижу, что этот вопрос довольно старый, но для тех, кто это проверяет в будущем, я хотел бы добавить эту ссылку из документации LLVM в качестве дополнения к обсуждению и для poeple, ищущего дополнительную информацию:
Стандарты кодирования LLVM: не использовать использование пространства имен std;
Я считаю, что название довольно показательно, почему я поделился им, чтобы помочь с этим вопросом.
В LLVM мы предпочитаем явно префикс всех идентификаторов из стандартного пространства имен с префиксом "std::", а не полагаться на "using namespace std;".
В заголовочных файлах добавление директивы 'using namespace XXX' загрязняет пространство имен любого исходного файла, которое # включает заголовок. Это явно плохо.
Изменить: Поэтому вместо использования 'using std namespace;' явно введите std:: для каждого случая, когда вы используете стандартную библиотеку. Это позволяет избежать конфликтов с пространствами имен исходных файлов. Это то, о чем говорится в цитате из статьи.