命名空间继承
Namespace inheritance
首先我不明白为什么我会得到这个错误
error: ‘cout’ was not declared in this scope
对于以下代码
#include <iostream>
namespace a {
void print() {
std:cout << "a" << std::endl;
}
}
namespace b {
using namespace a;
void print() {
std:cout << "b" << std::endl;
}
}
int main() {
b::print();
}
从广义上讲,我正在研究名称空间中的继承行为,因为我不需要类本身(它们无论如何都只是singleton)。对于名称空间方法,有什么建议或问题需要注意吗?
编辑:好吧,我;I’我对打字错误感到抱歉。在这种情况下,我可以把问题扩大吗?
#include <iostream>
namespace a {
void print2() {
print();
}
void print() {
std::cout << "a" << std::endl;
}
}
namespace b {
using namespace a;
void print() {
std::cout << "b" << std::endl;
}
}
int main() {
b::print2();
}
这不会编译错误:未在此作用域中声明"print"
有没有一种方法可以以通用的方式模拟类继承?
例如,如果a和b是类,则会打印a。如果print被声明为虚拟,那么b将被打印。
这可能吗?或者命名空间"继承"只是一个廉价的破解?
编辑2:
在print2输出a之前声明print。我想我现在的问题是:在这种情况下,有没有办法或模仿虚拟关键字?因此,下面将分别打印b和c。
#include <iostream>
namespace a {
void print() {
std::cout << "a" << std::endl;
}
void print2() {
print();
}
}
namespace b {
using namespace a;
void print() {
std::cout << "b" << std::endl;
}
}
namespace c {
using namespace a;
void print() {
std::cout << "c" << std::endl;
}
}
int main() {
b::print2();
c::print2();
}
您拼写错了std::cout
(std:cout
)。
在您的代码中,std:
为goto
声明了一个标签。声明的其余部分是:
cout << "a" << std::endl;
因此,编译器抱怨未知标识符cout
。
更新:
修复拼写错误后,将功能顺序更改为:
void print() {
std::cout << "a" << std::endl;
}
void print2() {
print();
}
更新2:
在你再次编辑这个问题后,它完全失去了最初的意义。但答案是No
。否,不能继承命名空间。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- 有关通过派生类在命名空间内继承的问题
- 对"vtable for "命名空间继承的未定义引用 对"类型信息"的未定义引用
- 模板类继承命名空间的名称查找
- 继承重载函数:需要命名空间
- 从类继承,在不同的命名空间中定义
- 命名空间继承
- 使用从命名空间继承的类的Eclipse相对缩进
- D&D 游戏的类、命名空间和继承帮助
- c++,命名空间,对继承类和Qt的名称查找
- c++中的命名空间类模板继承
- 命名空间和继承
- c++:从类继承是否会将其带入命名空间