Segmentation fault (core dumped) błąd podczas kompilacji

0
#include <iostream>

using namespace std;

class String
{
private:
public:
    string m_str{};
    String(string str)
        : m_str{str}
    {
    }
};

String operator+(const String &str1, const String &str2)
{
    return String{str1 + str2};
}

ostream &operator<<(ostream &out, const String &str1)
{
    out << str1.m_str;
    return out;
}

int main()
{
    String str1{"6"};
    String str2{"8"};
    String strSum{str1 + str2};
    cout << strSum << endl;

    return 0;
}

Jest mi ktoś w stanie wyjaśnić dlaczego po kompilacji wyskakuje błąd Segmentation fault (core dumped) ? Zapewne odwołuję się do pamieci do której nie mam dostępu ale w którym dokłądniej miejscu ?

2

No to podczas kompilacji, czy po kompilacji?

Anyway, problem jest tutaj:

String operator+(const String &str1, const String &str2)
{
    return String{str1 + str2};
}

masz nieskończoną rekurencję, i dochodzi do przepełnienia stosu.

0

W sumie to dobre pytanie czy podczas czy po. Skoro wykoczył błąd to oznacza że program musaił się już skompilować i natrafił na błąd i powiadamia o tym użytkownika, więc powinienem wszędzie pisać po kompilacji.

Jak najlepiej przerobić to przeciążenie operatora żeby nie dochodziło do przepełnienia ?

5

Ja zgaduje że ty chciałeś tam jednak mieć return String{str1.m_str + str2.m_str};

5

Nieskończona rekursja, bo operator dodawania jest pochrzaniony.

0

@Shalom Dzięki za pomoc, nie mam pojecia jak ja na to nie wpadłem, z 30 min szukałem co tutaj nie gra ;D

1

Btw, nie żeby coś, ale nie nazwałbym tego "własną implementacją stringa".

1 użytkowników online, w tym zalogowanych: 0, gości: 1