2015-12-01 5 views
-1

Это продолжение моего предыдущего вопроса. У меня есть код, который должен работать нормально, и он работает по большей части. Когда я запускаю его, выполняется большинство методов main, но я получаю ошибку сегментации при выполнении методов getter. Вот код:Ошибка сегментации по простой программе на С ++

#include <iostream> 
#include <string> 

using namespace std; 

class Person 
{ 

protected: 
    string m_FirstName, m_LastName, m_email; 

public: 
    Person(){} 
    Person(const string& firstName, const string& lastName) : 
    m_FirstName(firstName), m_LastName(lastName) 
     {} 

     string get_name() const 
     { 
       return m_FirstName; 
     } 
     string get_surname() const 
     { 
       return m_LastName; 
     } 



     bool has_email_p() 
     { 

     } 
}; 

class Person_with_telephone: public Person 
{ 

protected: 
    string m_telephone; 

public: 
    Person_with_telephone(){} 
    Person_with_telephone(const string& telephone) : m_telephone(telephone) 
    {} 

    bool has_telephone_p() 
     { 
       if (m_telephone == "") 
       { 
        cout << "You have no phone number registered" << endl; 
      return false; 
       } 

       else 
       { 
        cout << "Your number is: " << m_telephone << endl; 
      return true; 
       } 
     } 

     string get_telephone() const 
     { 
       return m_telephone; 
     } 

    string set_telephone() 
    { 

    } 

    string get_telephone() 
    { 

    } 


}; 

int main() 
{ 
    string f, l, ph; 

     cout << "Enter fist name: "; 
     cin >> f; 
     cout << "Enter Last name: "; 
     cin >> l; 
    cout << "Enter telephone number: "; 
    cin >> ph; 
     Person p(f, l); 
    Person_with_telephone pwt(ph); 
     cout << "Your name is: " << p.get_name() << " " << p.get_surname() << endl; 
    cout << "Has telephone? " << endl << " Your number is: " << pwt.get_telephone() << endl; 

     return 0; 
} 

Когда я компилирую это компилируется нормально, и когда я бегу я получаю попросил трех входов имя, фамилия и телефон, но когда я ввода последнего значения я получаю это: Odd segfault

+0

Пожалуйста, прочтите [предупреждения компилятора] (http://coliru.stacked-crooked.com/a/4b2627ecb212a280) –

+0

Вы забыли задать вопрос. Ваш вопрос: «Как устранить ошибку сегментации?» Если да, то почему так много кода? –

ответ

0

Ваши bool has_email_p(), string get_telephone() и string set_telephone() функции не работают или, что более важно, return ничего.

1

Вы ничего не дарите в Person_with_telephone::get_telephone(). Это вызовет segfault.

Если compile with proper warnings turned on Тогда вы должны, по крайней мере, получить

main.cpp:32:9: warning: control reaches end of non-void function [-Wreturn-type] 
     } 
     ^
main.cpp:69:3: warning: control reaches end of non-void function [-Wreturn-type] 
    } 
^
main.cpp:74:3: warning: control reaches end of non-void function [-Wreturn-type] 
    } 
^
3 warnings generated. 

Который позволил бы вам знать, что вам нужно возвращать заявления в этих функциях.

Смежные вопросы