如何解决为什么我不能使用双冒号在命名空间中前向声明一个类?
因为你做不到。在 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 举报,一经查实,本站将立刻删除。