注意:我发现我的 Xcode 如何编译下面的问题,它似乎与本文讨论的主题无关。当我有更多细节时,我会在这里提供。
我建议投票结束我的问题“过于本地化”,因为这是一个 Xcode 问题,与 c++ 代码本身无关。非常感谢您的帮助,就像我从答案中学到的一样。
下面的问题(现在已经回答并解决)是由于从 Xcode 目标中排除了一个令人困惑的文件,因此即使文件有问题也没有编译器错误。
我有一个纯虚拟接口,想定义它的工厂方法,它返回这个接口的一个子类。这工作正常:
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
定义的文件中,或者我必须将该文件包含在上面的文件中,这会创建一个循环依赖项。
有没有办法转发声明自定义构造函数?这将使一切变得简单得多。