2013-05-06 124 views
2

当我尝试在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) 
    {} 
}; 
+0

哪条线触发错误? – 2013-05-06 19:11:49

+0

我应该让评论更明显吗? – riv 2013-05-06 19:18:32

+0

对不起,我找了它,但一定忽略了它。 – 2013-05-06 19:24:33

回答

1

这是VC10中的一个错误。您的::A类名是完全限定的,全局名称空间中的A的定义对编译器可见。此外,GCC 4.7.2编译没有问题。

+0

谢谢,我已经在网上gcc测试中试过了;有谁知道它是否适用于VC12? – riv 2013-05-06 19:17:52

+0

@riv:不能在VC12上测试不幸 – 2013-05-06 19:18:56

+1

@riv,我只是想用VC12编译上面的代码片段,并且我得到了类似的错误。 – 2013-05-06 19:27:01