gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:30:31 25 4
gpt4 key购买 nike

class Namespace::Class;

为什么我必须这样做?:

namespace Namespace {
class Class;
}

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

error C2653: 'Namespace' : is not a class or namespace name

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

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

最佳答案

你得到了正确的答案,让我试着重新措辞:

类命名空间::Class;

Why do I have to do this?

您必须这样做,因为术语 Namespace::Class 告诉编译器:

...OK, compiler. Go find the namespace named Namespace, and within that refer to the class named Class.

但是编译器不知道你在说什么,因为它不知道任何名为 Namespace 的命名空间。即使有一个名为 Namespace 的命名空间,如:

namespace Namespace
{
};

class Namespace::Class;

它仍然行不通,因为您不能从该命名空间外部声明一个命名空间内的类。您必须在命名空间中。

因此,您实际上可以在命名空间中前向声明一个类。只需这样做:

namespace Namespace
{
class Class;
};

关于c++ - 为什么我不能使用双冒号在命名空间中前向声明一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com