命名空间内的正向声明
Forward declaration inside a namespace
我在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对此进行了编译,没有出现任何问题。
相关文章:
- 在命名空间 c++ 中正确声明 extern 变量
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 转发声明在命名空间中不起作用的替代方法
- C++ 17 个友元函数声明和内联命名空间
- 为什么 gcc 无法从其前向声明中检测到友元类命名空间?
- 声明"使用命名空间 C;"对于证明 [namespace.udir]/3 中的示例中显示的结果至关重
- 命名空间内C++变量声明
- 在命名空间中声明变量
- C++ 没有在命名空间外部声明的类主体的类
- 如何在命名空间中声明外部全局,然后定义它?
- 在 c++ 中在运行时声明对命名空间的引用
- 有没有办法转发声明命名空间或只是提前使其可见
- 如何在不同的命名空间中使用双重声明的 extern "C"函数进行 clang 构建(如 msvc 和 gcc)
- 为什么我应该使用extern关键字来声明命名空间范围中的变量
- 如何正确声明命名空间函数
- 如何转发声明命名空间中的类
- 在目标 C 中向前声明命名空间的C++类
- 在命名空间中的另一个函数内部正向声明命名空间中的一个函数
- 是否可以转发声明命名空间内的 typedef
- "using"命名空间和声明命名空间有什么区别?