在命名空间内转发声明

时间:2013-05-06 19:01:09

标签: c++ visual-studio

我在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)
  {}
};

1 个答案:

答案 0 :(得分:1)

这是VC10中的一个错误。您的::A类名称是完全限定的,并且编译器可以看到全局名称空间中A的定义。此外,GCC 4.7.2可以毫无问题地编译它。