gpt4 book ai didi

c++ - 前向声明不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:59 25 4
gpt4 key购买 nike

如果我这样做,我的前向声明不起作用:

class Manager::TagManager;

namespace UI
{

class Example
{
public:
...

Manager::TagManager* tagManager_;


};
}

它说使用未定义的类型。但是它像这样工作正常:

namespace Manager
{
class TagManager;
}

//same stuff follows

那有什么区别呢?是“类管理器::标签管理器;”不是命名空间管理器中的 TagManager 声明?

最佳答案

反问:您如何期望编译器知道 class Manager::TagManager 是否是命名空间 Manager 中类 TagManager 的声明> 或在封闭类 Manager 中嵌套类 TagManager 的声明?编译器之前从未听说过 Manager。它不知道它是一个类还是一个命名空间。这就是编译器试图通过该错误消息告诉您的内容。它实际上假设 Manager 是一个类类型(不是命名空间),尚未定义。

但是,即使它知道Manager 是什么,它仍然无法工作。在 C++ 中,诸如 Name1::Name2 之类的限定名称只能用于引用现有(即已声明的)实体。您不能使用限定名称来声明实体。

这意味着属于命名空间的实体的前向声明只能通过重新打开该命名空间来完成。嵌套到类中的实体的前向声明只能在封闭类的定义中完成。

对于命名空间中的实体,这相对容易,因为您可以根据需要多次重新打开命名空间。对于类中的嵌套实体,您只有一次机会。

关于c++ - 前向声明不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17459416/

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