如果我想在我的c ++程序中使用这样的句子,
while (cin >> c)
{
cout << c << endl;
}
c是我之前定义的Complex类。
如何重载运算符&gt;&gt;对于我的 Complex 类 我尝试了两种方法,但是当程序第二次运行上面的句子 cin&gt;&gt; c 时,由于分段错误而全部失败,and the first method is
friend istream& operator >> (istream& in, Complex& right)
{
char a;
char temp[50];
int cnt = 0;
double i = 0;
double r = 0;
while (in >> a)
{
if (a == ')')
{
temp[cnt] = a;
break;
}
temp[cnt++] = a;
}
sscanf(temp, "(%lf,%lf)", &r, &i);
right.real = r;
right.imag = i;
}
第二种方法是
friend istream& operator >> (istream& in, Complex& right)
{
double r = 0;
double i = 0;
in.ignore();
in >> r;
in.ignore();
in >> i;
in.ignore();
right.real = r;
right.imag = i;
}
我的意见是这样的
(适用1.5,2)(1,2.5)(1.5,2.5)(0,0)(1,2)
任何人都可以提供一些提示吗?我仍然遇到同样的问题,以下是错误的
编程接收信号SIGSEGV,分段故障。 在main.cpp中的f()中的0x0000000000401285:75 75(而cin&gt; c) (gdb)s
答案 0 :(得分:1)
首先,它是operator >>
而不是friend istream& operator>> (istream& in, Complex& right)
{
in >> right.real;
in >> right.imag;
}
(请注意缺少的空格)。
其次,为什么不呢:
operator<<
注意:您还需要重载cout << c << endl
this.searchSolutions()
才能正常工作。
答案 1 :(得分:1)
最有可能的问题是您使用非空终止的字符串调用sscanf
。
while (in >> a)
{
if (a == ')')
{
temp[cnt] = a;
break;
}
temp[cnt++] = a;
}
// Need to null terminate temp
temp[cnt+1] = '\0';
sscanf(temp, "(%lf,%lf)", &r, &i);