Использование переменных, определенных в анонимном пространстве имен в другом пространстве имен - PullRequest
2 голосов
/ 25 августа 2011

У меня есть это в файле .cpp:

namespace {
    std::string CListName;
}

namespace EXAMPLE_NS {
    CListName = "ListName";
    ...

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

Ответы [ 3 ]

7 голосов
/ 25 августа 2011

CListName = "ListName"; является оператором (в частности, это выражение присваивания, которое является оператором выражения).

Оператор не может появляться в области пространства имен;вам нужно поместить оператор в функцию.

3 голосов
/ 25 августа 2011

То, что у вас есть , является синтаксической ошибкой, но это не проблема с пространством имен. У вас есть оператор присваивания вне какой-либо функции или метода. GCC говорит мне:

error: expected constructor, destructor, or type conversion before ‘=’ token

При попытке скомпилировать ваш фрагмент. Clang имеет лучшее сообщение:

error: C++ requires a type specifier for all declarations
    CListName = "ListName";
    ^~~~~~~~~
1 error generated.

Все это означает одно и то же - вы не можете иметь операторы вне функций!

0 голосов
/ 25 августа 2011

Да, вы можете. Анонимные пространства имен - это способ C ++ удалить внешнюю связь объектов, объявленных внутри.

Так что я бы сказал, что это ошибка в подсветке синтаксиса Eclipse.

Конечно, вы выполняете присваивание функции, а не для краткости, не здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...