操作溢出不起作用C
Operation overflow not working c++
i构建类映射有理数,我想通过标量操作溢出实现乘法,类似的东西:
Rational &operator*(Rational const& a, double lambda)
{
Rational r(a._num * lambda, a._den);
}
其中 _num
和 _den
是有理数的分子和分母。
运行cout << r * 45.2;
时,我会得到-858993460/4389064
。应该注意的是,operator<<
在Rational
的其他实例上工作正常。
它如何无法正常工作?谢谢:)
Rational &
-您正在返回对临时(未定义行为)的引用,并且未能返回。您需要:
Rational operator*(Rational const& a, double lambda) {
return Rational(a._num * lambda, a._den);
}
我还建议注意您的编译器警告。您最初的代码应该在体面的编译器上调用多个。
您不会从该功能中返回任何内容。而且您无法返回对本地变量的引用,因此您可能应该将返回类型更改为Rational
(删除&
)
另外,它被称为"操作员过载"
operator*()
需要返回值。你不是。
呼叫者尝试使用不返回的函数的返回值的任何尝试。
另外,您的功能还会返回参考。这可能不是一个好主意。
您可能想做
之类的事情Rational operator*(Rational const& a, double lambda)
{
Rational r(a._num * lambda, a._den);
return r;
}
请注意,返回类型是Rational
,而不是参考。并返回r
的值。
这假设您已经实现了用于创建r
的构造函数,并且它按预期工作。您没有提供任何可以确认或否认该假设的信息。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 操作溢出不起作用C
- 二进制搜索树递归插入导致堆栈溢出,迭代插入不起作用