由于更新到XCode 5.1我的一个项目现在标题中有错误并且不会构建,我已经像以前一样将架构更改为32位,但仍然是同样的问题。
它引用的代码行是;
friend float
DistBetweenModels (ShapeModel* pModel1, ShapeModel* pModel2,
enEvalType nEvalType = ET_EyeDist, enDistType nDistType = DT_Max);
如果我删除了这位朋友'然后离开'浮动'该项目建立但我不相信它正在做它应该做的事情。
答案 0 :(得分:10)
如果我删除了这位朋友'然后离开'浮动'该项目建立但我不相信它正在做它应该做的事情。
这绝对不是正确的事情。
This是相关问题。
带有默认参数的朋友声明也必须是一个定义。
所以你可以选择如何解决这个问题。您可以将此函数的定义移动到朋友声明中:
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调用的函数(例如运算符重载)。
这假设该功能确实需要成为朋友。如果没有,那么你可以删除这个朋友声明。