c++ - 重载函数不明确

标签 c++ unit-testing overloading googletest

我的问题

我有这两个函数头:

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、密度和压力)的类。如果 header 中没有频率参数,我想只得到一个 double 值。直接组件还指示您是否写 f=0在 header 中,但在这种情况下,我得到了一个复杂的值。我不想像这样编辑整个程序: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;

关于c++ - 重载函数不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812222/

相关文章:

java - JNI YUV_420_888 到 RGBA_8888 的转换

c++ - std::advance() 导致死循环

c++ - 强制模板化对象从指针构造

java - 在每个单元测试后创建一个新的 bean 实例

java - 根据对象的类型调用适当的函数

C++ 链表 : Problem with struct inside class

ruby-on-rails - rails 引擎 : rake routes show its routes but on rspec execution "No route matches" is thrown

c# - Selenium中使用FireFoxDriver时,如何知道页面Url?

c++ - 用另一个类的函数重载一个函数

php - 如何将 PHP 的 __get() 和 __set() 用于我的类中定义的字段?