gpt4 book ai didi

c++ - 指定默认参数的友元声明必须是一个定义

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:30 24 4
gpt4 key购买 nike

自从更新到 XCode 5.1 后,我的一个项目现在在标题中出现了该错误并且无法构建,我已经像以前一样将架构更改为 32 位,但仍然是同样的问题。

它引用的代码行是;

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

如果我删除“ friend ”并保留项目构建的“ float ”,但我不相信它正在做它应该做的事情。

最佳答案

If I remove the 'friend' and leave the 'float' the project builds but I am not confident it is doing what it should.

这绝对不是正确的做法。

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 调用的函数(例如运算符重载)。

这假设函数确实需要成为友元。如果不是,那么您可以删除此好友声明。

关于c++ - 指定默认参数的友元声明必须是一个定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22533511/

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