LLVM Compiler 2.0: предупреждение с использованием «namespace std;» - PullRequest
15 голосов
/ 17 октября 2010

В Xcode, использующем LLVM 2.0, когда я помещаю строку using namespace std; в мой код C ++, я получаю это предупреждение:

Семантическая проблема
Использование директивы относится к неявно определенному пространству имен 'std'

Есть ли способ это исправить? Почему он дает это предупреждение?

Ответы [ 4 ]

25 голосов
/ 17 октября 2010

Вы включили какие-нибудь стандартные заголовочные файлы?В противном случае компилятор не знает о namespace std.

. Пожалуйста, оставьте больше кода, чтобы уточнить.

7 голосов
/ 08 февраля 2015

Перемещение используемого пространства имен std после #include может устранить это предупреждение.

6 голосов
/ 29 марта 2011

я решил эту проблему вот так

#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;

}
0 голосов
/ 19 августа 2016

Я вижу, что этот вопрос довольно старый, но для тех, кто проверяет его в будущем, я хотел добавить эту ссылку из документации LLVM в качестве дополнения к обсуждению и для людей, ищущих дополнительную информацию:

Стандарты кодирования LLVM: Не использовать с использованием пространства имен std;

Я считаю, что заголовок довольно показателен, почему я поделился им, чтобы помочь с этим вопросом.

В LLVM мы предпочитаем явно указывать префикс «std ::» перед всеми идентификаторами из стандартного пространства имен, а не полагаться на «использование пространства имен std;».

В заголовочных файлах добавлениедиректива using namespace XXX загрязняет пространство имен любого исходного файла, который включает в себя заголовок.Это явно плохо.

Редактировать: Так что вместо этого, если использовать 'использование пространства имен std;'явно введите std :: для каждого случая, когда вы используете стандартную библиотеку.Это позволяет избежать конфликтов с пространствами имен исходного файла.Вот что советует цитата из статьи выше.

...