命名空间内的正向声明

Forward declaration inside a namespace

本文关键字:声明 命名空间      更新时间:2023-10-16

我在Visual Studio(2010(中编译代码时遇到了一个奇怪的问题;这里有一个孤立的(简化的(例子:

class A
{
public:
  enum {
    VALUE   = 0
  };
};
namespace ns
{
class A;
class B
{
public:
  B(int val = ::A::VALUE) // this line
  {}
};
class A : public ::A
{
public:
};
}

这会产生以下错误:error C2027: use of undefined type 'ns::A'。是VS中的错误还是我做错了什么?

更新:这似乎是Visual Studio特有的错误。以下是Microsoft Connect上建议的解决方法:

class B
{
public:
  typedef ::A A1;
  B(int val = A1::VALUE)
  {}
};

这是VC10中的一个错误。::A类名是完全限定的,全局命名空间中A的定义对编译器可见。此外,GCC 4.7.2对此进行了编译,没有出现任何问题。