指定默认参数的朋友声明必须是定义

use*_*723 5 c++ objective-c++ xcode5.1

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

它所指的代码行是;

friend float 
    DistBetweenModels (ShapeModel* pModel1, ShapeModel* pModel2,
                        enEvalType nEvalType = ET_EyeDist, enDistType nDistType = DT_Max); 
Run Code Online (Sandbox Code Playgroud)

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

bam*_*s53 10

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

这绝对不是正确的事情.

是相关问题.

具有默认参数的朋友声明也必须是定义.

所以你有一些选择如何解决这个问题.您可以将此函数的定义移动到friend声明中:

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

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

friend float 
DistBetweenModels (ShapeModel* pModel1, ShapeModel* pModel2,
                    enEvalType nEvalType, enDistType nDistType);
Run Code Online (Sandbox Code Playgroud)

但是你应该确保在这个函数的命名空间范围内有一个包含默认参数的早期的非朋友声明.

我会选择第二种解决方案; 定义类外的函数并在那里移动默认参数.这是因为对内联定义的友元函数进行名称查找有一些细微之处.内联好友函数应仅用于预期通过ADL调用的函数(例如运算符重载).

这假设该功能确实需要成为朋友.如果没有,那么你可以删除这个朋友声明.