算术错误,c++xcode 4.62
exc_arithmetic error, c++ xcode 4.62
我是c++的初学者。我想知道为什么在这一行抛出异常:
operator double() const
{
return this->denominator/this->numerator;
}
我找到了numerator == 0
,但我在ctor
中给出了默认值。为什么?请帮帮我。
class Rational {
public:
int numerator;
int denominator;
Rational(int numerator = 2, int denominator = 1)
{
numerator = 2;
denominator = 1;
};
operator double() const
{
return this->denominator/this->numerator;
};
};
int main(int argc, const char * argv[])
{
Rational r(1, 2);
cout << r;
// double d = 0.5*r;
return 0;
}
首先,这行非常错误:
Rational(int numerator = 2, int denominator = 1){ numerator = 2; denominator = 1;};
参数numerator
和denominator
位于ctor的堆栈框架中,因此隐藏了类的成员Rational::numerator
和Rational::denominator
。其次,您完全忽略了调用者实际发送的参数(不是因为您指定了默认值,而是因为您显式设置了numerator=2; denominator=1
Rational(int numerator = 2, int denominator = 1){ this->numerator = numerator; this->denominator = denominator;};
OR您可以使用初始值设定项列表(和重载构造函数):
Rational() : numerator(2), denominator(1) {};
Rational(int numerator, int denominator) : numerator(numerator), denominator(denominator) {};
现在,第二个问题是int/int => int
::将一个整数除以另一个整数会产生整数除法,您需要将其中一个int强制转换为double,以便在计算除法之前将两个int都上转换为double
operator double() const{ return ((double)this->denominator)/this->numerator;};
Rational(int numerator = 2, int denominator = 1)
{
numerator = 2;
denominator = 1;
};
我会把这个改成
Rational(int numerator, int denominator)
{
this->numerator = numerator;
this->denominator = denominator;
};
我不知道这是不是导致了你的问题,但我认为这是造成问题的原因。你对Rational(int,int)的调用仍然可以正常工作,并将你指定的值添加到你正在创建的对象中。
代码的问题在于范围。我相信您只是在重新分配参数,而不是实际重新分配实例变量,我认为这是您的目标。
相关文章:
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 在 xcode 10 上找不到 stdlibc++ 标头错误
- '-print_statistics'链接器选项在 Xcode 中产生错误
- Xcode OSX上的C++构建失败,出现多个错误文件IO..不可用:在macOS 10.15中引入
- 终端错误MacOS:/Applications/Xcode.app/Content/Developer/Toolchai
- C++ Mac Xcode 错误:控制可能达到非无效功能的末尾
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- 线程 1:xcode 中出现EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)错误
- OPENCV错误在XCode 8中加载Fisher面部识别器时
- Xcode 8.3.2 中的错误警告:文件的非可移植路径 - 指定的路径与磁盘上的文件名不同
- 当我尝试构建和运行C 程序时,获取Xcode错误代码
- Xcode 错误:指针和双精度之间的比较
- Xcode C++错误"linker command failed with exit code 1"
- Xcode 错误:"2 duplicate symbols for architecture x86_64"
- Xcode错误-没有这样的文件或目录
- XCode 错误"Undefined symbols for architecture x86_64" C++
- Xcode 错误:架构 x86_44 和 ld 的未定义符号:找不到架构x86_64的符号
- 函数样式强制转换或构造类型 Xcode 错误的'('
- 跳过列表实现c++ - XCode错误
- Xcode 错误"not found for architecture" 。尝试不使用库的基本C++