C++ 命名空间内的类定义

C++ 命名空间内的类定义,c++,class,namespaces,C++,Class,Namespaces,我有这样一个类声明: // bar.h namespace foo { class bar { // members both public and private } } 当我定义类时,我想这样做 // bar.cpp namespace foo::bar { // member definitions } 而不是 namespace foo { bar::x() {} bar::y() {} bar::z() {} } 但

我有这样一个类声明:

// bar.h
namespace foo {
    class bar {
        // members both public and private
    }
}
当我定义类时,我想这样做

// bar.cpp
namespace foo::bar {
    // member definitions
}
而不是

namespace foo {
    bar::x() {}
    bar::y() {}
    bar::z() {}
}
但我不能。为什么会这样?我以为类声明了名称空间,但我一定错了。scope运算符不应该先解析命名空间范围,然后解析类范围吗

我这样问是因为每当你有一个非平凡长度的类名时,重新键入类名可能会变得非常重复,特别是如果它有多个成员的话。也许这是为了让人们定义小型类接口

为什么会这样?我以为类声明了名称空间,但我一定错了

你错了

scope运算符不应该先解析命名空间范围,然后解析类范围吗

语言支持这一点并不是不可能的,但事实并非如此

可能是因为它可能会让人有点困惑,而且因为以下内容完全是谎言:

class bar {
    void x();
    void y();
    void z();
};

namespace bar {
    void x() {}
    void y() {}
    void z() {}
}
实际上,与您可以使用名称空间进行的这种“内联定义”类似的是成员函数的内联定义:

class bar {
   void x() {}
   void y() {}
   void z() {}
};
为什么会这样?我以为类声明了名称空间,但我一定错了

你错了

scope运算符不应该先解析命名空间范围,然后解析类范围吗

语言支持这一点并不是不可能的,但事实并非如此

可能是因为它可能会让人有点困惑,而且因为以下内容完全是谎言:

class bar {
    void x();
    void y();
    void z();
};

namespace bar {
    void x() {}
    void y() {}
    void z() {}
}
实际上,与您可以使用名称空间进行的这种“内联定义”类似的是成员函数的内联定义:

class bar {
   void x() {}
   void y() {}
   void z() {}
};

首先,您的类声明需要一个
在它之后:

namespace foo 
{
    class bar 
    {
        // members both public and private
    }; // error without this
}
在实现类(非内联)时,可以通过两种方式实现:

void foo::bar::x() 
{
    // function definition
}


请注意,
bar
是一个类,而不是名称空间。

首先,您的类声明需要一个
在它之后:

namespace foo 
{
    class bar 
    {
        // members both public and private
    }; // error without this
}
在实现类(非内联)时,可以通过两种方式实现:

void foo::bar::x() 
{
    // function definition
}


请注意,
bar
是一个类,而不是名称空间。

您缺少一个结束语
栏上的code>
定义。您缺少一个结束
栏上
定义。