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>
定义。您缺少一个结束代码>在栏上
定义。