使用另一个命名空间中的匿名命名空间中定义的变量

时间:2011-08-25 17:02:10

标签: c++ namespaces

我在.cpp文件中有这个:

namespace {
    std::string CListName;
}

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

但Eclipse强调该赋值为语法错误。我认为你不能使用来自另一个命名空间的匿名命名空间吗?

3 个答案:

答案 0 :(得分:7)

CListName = "ListName";是一个语句(具体来说,它是一个赋值表达式,它是一个表达式语句)。

语句不能出现在命名空间范围内;你需要将语句放入函数中。

答案 1 :(得分:3)

你在那里语法错误,但它不是命名空间的问题。你所拥有的是任何函数或方法之外的赋值语句。 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.

但这一切都意味着同样的事情 - 你不能在函数之外发表声明!

答案 2 :(得分:-1)

是的,你可以。匿名命名空间是删除内部声明的对象的外部链接的C ++方法。

所以我说这是Eclipse语法高亮中的一个错误。

当然,你正在进行一项功能的分配,为了简洁不在这里输入,不是吗?