gpt4 book ai didi

c++ - 需要在代码之前定义类定义的 dynamic_cast 问题

转载 作者:行者123 更新时间:2023-11-28 01:24:37 25 4
gpt4 key购买 nike

我目前在使用 dynamic_cast<> 以及我构建代码的方式时遇到问题。所以我有 Manager 类,它获取一个指针并尝试检查它是否是 Derived 对象,如果是,则在 if 语句中运行一些额外的代码。但是为了使 dynamic_cast<> 起作用,它需要类定义出现在实际 dynamic_cast<> 使用之前。

所以我交换了类 Manager 和类 Derived 定义的位置,使 Derived 类的定义早于 Manager 类。但是现在,我收到错误消息,指出“Manager”是未定义的类型。我猜想为了将 Manager 作为引用传递,派生类需要首先定义 Manager 的类定义。

我能想到的最好的解决方案是不将 Manager 类作为引用传递,而是将其作为指针传递(我不太喜欢这种方法,因为我知道 Manager 类将始终是一个有效的指针,因此它使它成为一个指针毫无意义)。我只是想知道是否有比我现有的解决方案更好的替代解决方案。

非常感谢您!

编辑:不幸的是,我需要将所有类定义和实现放在一个文件中,因此将它们拆分为 .h 和 .cpp 文件不太理想。对于提问的人,是的,这是家庭作业,但我的教授希望将它放在一个文件中。

class BaseClass
{
virtual VirtualClassName() = 0;
};

class Manager
{
void FunctionNameOne(const BaseClass* const ClassPointer)
{
if(Derived* DerviedPtr = dynamic_cast<Derived*>(ClassPointer))
{
//Do stuff with DerviedPtr
}
}
};

class Derived : public BaseClass
{
Void FunctionNameTwo(const Manager& Manager)
{
//Do stuff with Manager
}
};

最佳答案

通常,您将声明放入项目的 .h 文件中,将方法的实现放入 .cpp 文件中。

如果您遵循这种方式,所有类定义都是已知的,并且您可以毫无问题地在这种情况下使用动态转换。

关于c++ - 需要在代码之前定义类定义的 dynamic_cast 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54483432/

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