重载功能不明确

Overloading function is ambigious

本文关键字:不明确 功能 重载      更新时间:2023-10-16

我的问题

我有两个函数头:

const FlowTools::LocalFlow < double >& harmonic( const int i, const int j, const int k ) const;
const FlowTools::LocalFlow < std::complex < double > >& harmonic( const int i, const int j, const int k, const int f ) const;

LocalFlow只是一个包含五个物理参数(速度 3D、密度和压力)的类。如果标题中没有频率参数,我只想获得一个双精度值。直接组件还指示您是否在标头中写入f=0,但在这种情况下,我得到一个复杂的值。我不想像这样编辑整个程序:xxx.harmonic().real()。在重载函数之前,它会调用flowField(int i, int j, int k) .我做重构。

现在我正在使用 Google 测试(C++ 的单元测试库)测试该功能,如下所示:

ASSERT_THROW(xxx.harmonic(d,d,d), ERROR);
ASSERT_THROW(xxx.harmonic(d,d,d,0), ERROR);

。并为第一个函数收到此错误:

'

ASSERT_THROW( xxx.harmonic(d,d,d), ERROR) ' 是模棱两可的 ' 候选人 是:

FlowTools::LocalFlow<double> & harmonic(int, int, int)

FlowTools::LocalFlow<std::complex<double>> & harmonic(int, int, int, int) '

我的错误是什么?

删除f = 0,这样它就不会再模棱两可了。

所以而不是

const FlowTools::LocalFlow<double>&
harmonic(int i, int j, int k) const;
const FlowTools::LocalFlow<std::complex<double>>&
harmonic(int i, int j, int k, int f = 0) const;
// f = 0 make ambiguous call when not provided

const FlowTools::LocalFlow<double>&
harmonic(int i, int j, int k) const;
const FlowTools::LocalFlow<std::complex<double>>&
harmonic(int i, int j, int k, int f) const;