首先我不明白为什么我会收到这个错误
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();
}
从广义上讲,我正在研究命名空间中的继承行为,因为我本身不需要类(无论如何它们只是单例)。使用命名空间方法需要注意什么建议或陷阱?
编辑:好的,我很抱歉错字。在那种情况下,我可以扩展这个问题吗?
#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();
}
这不会编译错误:未在此范围内声明“打印”
有没有一种方法可以以通用方式模拟类继承?
例如,如果 a 和 b 是类,则将打印 a。如果 print 被声明为 virtual 那么 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();
}