来自重载运算符的返回值Segmentation Fail

时间:2011-01-22 07:27:37

标签: c++ class return

得到标题

DuzaLiczba operator>(const DuzaLiczba& right) const;
string& getData();
virtual ~DuzaLiczba();
private:
string& data;

在我的类重载操作符中返回“\ 002 \ 994 \ 23923 \”

中的字符串
return DuzaLiczba(wynik);

主要

        cout << dl3.getData();
        cout.flush();

cout.flush抛出分段失败。

课堂上的回归是在ascii? 而且还有问题。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你不应该在班上有参考。您持有对局部变量的引用,该变量被破坏然后被访问导致分段错误。另外,运营商&gt;和运算符&lt;通常会返回布尔。

答案 1 :(得分:0)

class DuzaLiczba {
public:
    DuzaLiczba(string& input);
    DuzaLiczba(const DuzaLiczba& orig);
    bool operator==(const DuzaLiczba &other) const;
    bool operator!=(const DuzaLiczba &other) const;
    DuzaLiczba operator+(const DuzaLiczba& right) const;
    DuzaLiczba operator-(const DuzaLiczba& right) const;
     DuzaLiczba operator<(const DuzaLiczba& right) const;
    DuzaLiczba operator>(const DuzaLiczba& right) const;
    string& getData();
    virtual ~DuzaLiczba();
private:
    string& data;

};

和==运算符

bool DuzaLiczba::operator==(const DuzaLiczba &other) const {
string liczba1 = this->data;
string liczba2 = right.data;
char index1 = liczba1.length();
char index2 = liczba2.length();
short k;
short o;
short f = 0; //przeniesienie
string wynik;
int sizefi = 0;
char temp;
int i = 0;
//"gupie" to C# RUUUULEEEZ
// http://www.youtube.com/watch?v=bXoc9hOIj3M hahahaa "D

if (liczba1.length() == liczba2.length()) { //najpierw dlugosc szybciej niz pokolei
    for (i = 0; i < index1; i++) { 
        if (liczba1[i] == liczba2[i]) {   //sprawdza kazdy element jesli sie rozni to false
            wynik =
                    "TRUE";

        } else {
            wynik = "FALSE";
        }

    }

} else {
    wynik = "FALSE";
}

return DuzaLiczba(wynik);

 }

并重新调整数据

string& DuzaLiczba::getData() {
 return data; //zwoloniony string
     }

我想要返回一个字符串。 dl1 =“123089127312890372109371203971293012903” dl2 =“12837129037812903812903” 例如。 DuzaLiczba dl3(dl1 + dl2) 和cout它。

课堂内的代码做数学很棒。

或创建重载运算符“&lt;&lt;”。