我在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 :(得分:1)
这是VC10中的一个错误。您的::A
类名称是完全限定的,并且编译器可以看到全局名称空间中A
的定义。此外,GCC 4.7.2可以毫无问题地编译它。