2016-05-06 5 views
-1

Вызов оператора + = в приведенной ниже программе вызывает ошибку сегментации. Понятия не имею почему.Оператор C++ + = перегрузка строки структуры

#include <string> 
struct foo 
{ 
    std::string name; 
    foo operator+=( foo bar) 
    {} 
}; 
int main() 
{ 
    foo a,b; 
    a += b; 
    return 0; 
} 
+5

Вам нужно что-то вернуть из функции оператора. –

+1

Обязательно выполните компиляцию приложения с включенными предупреждениями, а предупреждения - как ошибки. Используйте это: 'g ++ -Wall -Wextra -Werror -Wpedantic'. Это скажет вам, где проблема. – SergeyA

+1

Компилятор должен был предупредить об этом. – drescherjm

ответ

4

Отсутствие оператора возврата может привести к ошибке сегментации. Ваша реализация должна выглядеть следующим образом:

foo& operator+=(const foo& bar) 
{ 
    name += bar.name; 
    return *this; 
} 
-1

Оператор + = не нужно возвращать значение:

struct Test 
{ 
    std::string str; 
    void operator += (const Test& temp); 
}; 

void Test::operator += (const Test& temp) 
{ 
    str += temp.str; 
    return; 
} 

int main() 
{ 
    Test test, test_2; 
    test.str = "abc"; 
    test_2.str = "def"; 
    test += test_2; 
    return 0; 
} 
Смежные вопросы