C++过载问题
C++ Overloading issue
这是我第一次尝试在c++中重载(当然还在学习),我不太确定为什么这段代码会出错?
bool operator<= (Vector3 v) {
if (x <= v.x) && (y <= v.y) && (z <= v.z) {
return true;
}
}
错误是
19 |错误:在"("标记|之前需要标识符
和
19|错误:应为";"在"("标记|之前
我搜索了这两个,发现第一个是函数之外的代码(事实并非如此),但在第二个上没有找到任何内容。
感谢阅读
除了运算符的逻辑之外,if
中似乎缺少一组括号。这在语法上是正确的:
if ( (x <= v.x) && (y <= v.y) && (z <= v.z) )
但你真正应该做的是简化整个过程,避免不必要的if
:
bool operator<= (Vector3 v) {
return (x <= v.x) && (y <= v.y) && (z <= v.z);
}
最后,比较成员函数应该是const
,因为在比较时修改某些内容是没有意义的。此外,您可能希望通过引用传递参数,尽管这取决于Vector
的大小和复制成本。
bool operator<= (const Vector3& v) const
{
return (x <= v.x) && (y <= v.y) && (z <= v.z);
}
还添加了其他答案,如果不为true,您的语句会返回什么,c++默认不返回任何内容,这就是为什么最好返回操作结果
return (x <= v.x) && (y <= v.y) && (z <= v.z);
if语句中的条件应括在括号中。因此,有效的if语句将看起来像
if ( (x <= v.x) && (y <= v.y) && (z <= v.z) ) {
此外,最好以以下方式定义操作员
bool operator <=( const Vector3 &v ) const
{
return ( ( x <= v.x ) && ( y <= v.y ) && ( z <= v.z ) );
}
注意:您可能会考虑这个:
inline bool operator<= (const3 Vector& u, const Vector3& v) {
if(u.x < v.x) return true;
if(u.x == v.x) {
if(u.y < v.y) return true;
if(u.y == v.y) {
if(u.z <= v.z) return true;
}
}
return false;
}
这里有一个独立的二进制函数,它通过常量引用获取参数,以避免不必要的复制。逻辑也发生了变化(x的秩比y高,y的秩比z高)。这使得[1,1,1]小于[1,1,2](在您的逻辑中不是这样)。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题