gpt4 book ai didi

c++ - 如何转发声明自定义构造函数?

转载 作者:行者123 更新时间:2023-12-05 09:24:15 27 4
gpt4 key购买 nike

注意:我发现我的 Xcode 编译以下内容的方式存在问题,它似乎与此处讨论的主题无关。当我有更多详细信息时,我会在此处提供。

我建议投票结束我的问题,因为它是一个 Xcode 问题,与 c++ 代码本身无关。非常感谢您的帮助,就像我从答案中学到的一样。

以下问题(现已回答并解决)是由 Xcode 目标中混淆排除的文件引起的,因此即使文件有问题也没有编译器错误。


我有一个纯虚接口(interface),想定义它的工厂方法,返回这个接口(interface)的一个子类。这很好用:

struct MyVirt{
...all virtual stuff
};

class SubVirt; //forward declaration allows factory:
MyVirt*CreateClass(){
return new SubVirt;
}

更新:一些评论说前向声明不足以实现上述目标,但这是不正确的。您可以在没有 SubVirt 类的完整定义的情况下完成上述罚款。

现在,我想要做的是拥有一个接受参数的自定义构造函数。因此:

MyVirt*CreateClass(){
return new SubVirt(arg 1, etc);
}

问题是 class 前向声明不再足够。它需要查看类定义或其标题。这意味着我可以将工厂方法移动到定义了 SubVirt 的文件,或者我必须将该文件包含在上面的文件中,这会产生循环依赖。

有没有办法转发声明自定义构造函数?这将使一切变得简单得多。

最佳答案

您的 CreateClass 函数看起来很奇怪,您在函数定义中错过了 ()。应该是这样的:

MyVirt* CreateClass()
{
return new SubVirt(arg 1, etc);
}

当返回一个指针时,编译器需要知 Prop 体类型和构造函数,因此前向声明是不够的。

你可以做的是:

  • 在头文件中:前向声明SubVirtCreateClass函数
  • cpp文件:包含MyVirt.h并定义CreateClass函数

关于c++ - 如何转发声明自定义构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14656828/

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