微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我不能使用双冒号在命名空间中前向声明一个类?

如何解决为什么我不能使用双冒号在命名空间中前向声明一个类?

因为你做不到。在 C++ 语言中,完全限定名称仅用于引用 现有 (即先前声明的)实体。它们不能用于引入 实体。

实际上,您 正在“重新打开”命名空间以声明新实体。 如果该类Class后来被定义为不同命名空间的成员 - 它是一个完全不同的类,与您在此处声明的类无关。

一旦你开始 定义 预先声明的类,你就不需要再次“重新打开”命名空间。您可以在全局命名空间(或任何包含您的命名空间Namespace)中将其定义为

class Namespace::Class {
  /* whatever */
};

由于您指的是已在命名空间中声明的实体,因此Namespace您可以使用限定名称Namespace::Class

解决方法

class Namespace::Class;

为什么我必须这样做?:

namespace Namespace {
    class Class;
}

使用 VC++ 8.0,编译器问题:

错误 C2653:“命名空间”:不是类或命名空间名称

我假设这里的问题是编译器无法判断Namespace是类还是命名空间?但是为什么这很重要,因为它只是一个前向声明?

是否有另一种方法可以前向声明某个命名空间中定义的类?上面的语法感觉就像我正在“重新打开”命名空间并扩展它的定义。如果Class实际上没有在
中定义Namespace怎么办?这会在某些时候导致错误吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。