one.h:
namespace one {
class X : public IZ {
public:
void function(); // virtual function (=0) in IZ
}
}
two.h
namespace one {
class Y {
public:
void functionY(class X& x); // or one::X& x
}
}
我有几个由几个文件分发的类,它们共享相同的命名空间。根据我的理解,如果我对所有类都有相同的命名空间,那么它们都可以相互访问而无需放置NAMESPACE :: class_x,因为它们都属于同一个命名空间。
我想了解的是,在上述特殊情况下,为什么需要在class
之前使用关键字namespace::
或X& x
。< / p>
它与X
的{{1}}继承有关,作为虚函数然后&#34;覆盖&#34;在IZ
?
答案 0 :(得分:1)
在这种情况下,X类型在编译时解析。链接器需要了解X是什么,它是一个类,或者它是在命名空间中的作用域。
namespace::x
中,那么您
如果未在类中定义类,则会出现编译错误
命名空间。答案 1 :(得分:1)
是否为命名空间,您需要声明一个您想在以后引用的类。
您可以在文件two.h中#include "one.h"
使one::X
的整个定义为已知,或者您可以在不定义的情况下添加声明X
:
// two.h
namespace one
{
class X;
class Y
{
void f(X const & x);
// ...
};
}
在任何一种情况下,不需要重新命名命名空间,因为你已经在其中。
答案 2 :(得分:0)
关闭问题:问题是由循环引用引起的。