重载函数不明确
Overloading function is ambigious
我的问题
我有这两个功能 headers:
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
只是一个 class,它包含五个物理参数(速度 3D、密度和压力)。如果 header 中没有频率参数,我想 只得到一个双精度值 。直接分量还指示您是否在 header 中写入 f=0
,但在这种情况下,我得到一个复杂的值。我不想像这样编辑整个程序:xxx.harmonic().real()。在重载函数之前,它调用 flowField(int i, int j, int k)
。我做重构。
现在我正在使用 Google Test(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)
' is ambiguous ' Candidates
are:
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;
我的问题
我有这两个功能 headers:
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
只是一个 class,它包含五个物理参数(速度 3D、密度和压力)。如果 header 中没有频率参数,我想 只得到一个双精度值 。直接分量还指示您是否在 header 中写入 f=0
,但在这种情况下,我得到一个复杂的值。我不想像这样编辑整个程序:xxx.harmonic().real()。在重载函数之前,它调用 flowField(int i, int j, int k)
。我做重构。
现在我正在使用 Google Test(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)
' is ambiguous ' Candidates are:
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;