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

C++ 在另一个命名空间中使用匿名命名空间中定义的变量,c++,namespaces,C++,Namespaces,我在.cpp文件中有以下内容: namespace { std::string CListName; } namespace EXAMPLE_NS { CListName = "ListName"; ... 但是Eclipse强调了这个赋值是一个语法错误。我认为您不能从另一个名称空间使用匿名名称空间?是的,您可以。匿名命名空间是C++方法来删除内部声明的对象的外部链接。 所以我认为这是Eclipse语法中的一个bug 当然,您是在对函数进行赋值,而不是为了简洁起见在此

我在.cpp文件中有以下内容:

namespace {
    std::string CListName;
}

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

但是Eclipse强调了这个赋值是一个语法错误。我认为您不能从另一个名称空间使用匿名名称空间?

是的,您可以。匿名命名空间是C++方法来删除内部声明的对象的外部链接。 所以我认为这是Eclipse语法中的一个bug

当然,您是在对函数进行赋值,而不是为了简洁起见在此处键入,是吗?

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

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

您遇到的是语法错误,但名称空间没有问题。在任何函数或方法之外都有赋值语句。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.

不过,这都意味着同一件事——函数之外不能有语句

这里没有虫子。您不能只在名称空间范围内赋值。因此,我将赋值语句移动到示例中的构造函数中,似乎已经解决了eclipse错误,单击var名称也会突出显示匿名名称。