如果你有ns2作为ns1的子命名空间,并且你在ns2类的头文件中使用ns1类,你是否需要像在ns1&时那样明确地去掉它。 ns2是无关的?
e.g
namespace ns1
{
class Button
{
...
};
}
include "button.h"
namespace ns1
{
namespace ns2
{
class TestDialog
{
Button *pButton;
};
}
}
这应该是对的吗?我似乎必须将dialog.h更改为:
namespace ns1
{
----->class Button;
namespace ns2
{
但我不太清楚为什么。命名空间不能继承吗?如果我没有进行此更改,我会收到有关“未解析的符号ns1 :: ns2:Button :: ...”的链接器错误。
答案 0 :(得分:1)
命名空间中声明的所有函数,类(类型),变量等在所有子名称空间中都可用(不带前缀),依此类推。 因此,当在n1中定义名称空间n2时,n2中的所有代码都可以使用没有前缀的n1代码。
答案 1 :(得分:1)
您的代码在gcc 4.4.5中可以正常使用,无需另外的Button声明。您错过了#
行中的include
,但我认为这只是一个转录错误。您确定这是导致问题的代码的一部分吗?
答案 2 :(得分:-1)
你错过了#符号,用#include重新编译,你应该没问题。问题是当你不包含时,你从未在另一个文件中实际声明该类。