指定默认实参的友元声明必须是定义



自从更新到XCode 5.1我的一个项目现在在标题中有这个错误并且不会构建,我已经像以前一样将架构更改为32位,但仍然存在相同的问题。

它所指向的代码行是;

friend float 
    DistBetweenModels (ShapeModel* pModel1, ShapeModel* pModel2,
                        enEvalType nEvalType = ET_EyeDist, enDistType nDistType = DT_Max); 

如果我删除'朋友'并离开'浮动'项目构建,但我不相信它正在做它应该做的。

如果我删除"朋友"并离开"浮动"项目构建,但我不相信它正在做它应该做的。

那绝对不是正确的事情。

这是一个相关的问题。

带默认实参的友元声明也必须是定义。

所以你有一些选择来解决这个问题。您可以将此函数的定义移动到友元声明中:

friend float 
DistBetweenModels (ShapeModel* pModel1, ShapeModel* pModel2,
                    enEvalType nEvalType = ET_EyeDist, enDistType nDistType = DT_Max)
{
    // function definition goes here
}

或者你可以删除友元声明中的默认参数:

friend float 
DistBetweenModels (ShapeModel* pModel1, ShapeModel* pModel2,
                    enEvalType nEvalType, enDistType nDistType);

但是你应该确保在这个函数的命名空间作用域中有一个更早的非友元声明,其中包括默认参数。

我会选择第二个解决方案;在类外部定义函数并将默认参数移到那里。这是因为内联定义的友元函数的名称查找有一些微妙之处。内联友元函数只应用于预期通过ADL调用的函数(如操作符重载)。

这里假设函数不需要是友元。

最新更新