重载功能不明确
Overloading function is ambigious
我的问题
我有两个函数头:
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;
相关文章:
- Visual C++(VS2017)中用户定义的转换不明确
- 重载类方法的不明确调用
- 为函数定义符号不明确的指针参数
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 在 C++17 中的命名空间和子命名空间中重载运算符是不明确的
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 对重载函数find_first_not_of的不明确调用
- 不明确的成员模板查找
- gcc出现不明确的模板实例化错误
- 调用'Node'构造函数是不明确的
- 如何解决不明确的运算符过载问题?
- 使用 nullptr 调用重载方法是不明确的
- "fpclassify":对重载函数的不明确调用
- 对"列表"的引用不明确,包括头文件
- 删除全局隐式函数 - 避免使用不明确的运算符
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- 使用 std::iterator_traits<> 时编译时错误不明确
- 解析一般CSV读取功能时,如何处理不同的数据类型?(不明确指定它们)
- 重载功能不明确