2015-04-01 1 views
-1

В настоящее время я получаю необработанное исключение в своем коде, и я понятия не имею, почему. Это первый раз, когда я использую более одного класса вместе.Необработанное исключение в моем меню

На данный момент я пытаюсь ввести пользовательский ввод в строку из другого класса. Я пытаюсь ввести пользовательский ввод в строке под названием имя в классе ниже

#ifndef SHIP_H 
#define SHIP_H 
#include "ApplicationMenu.h" 
#include <string> 
class Ship 
{ 
public: 
    Ship(void); 
    ~Ship(void); 

    std::string _size; 
    std::string _shipName; 
    std::string name; 
}; 

#endif 

В следующей функции, которая проходила в главном

#include "ApplicationMenu.h" 
#include "Ship.h" 
#include <string> 
#include <sstream> 

class Ship; 

#include <iostream> 

using namespace std; 

ApplicationMenu::ApplicationMenu(void) { userChoice = 0; } 


ApplicationMenu::~ApplicationMenu(void) { } 



void ApplicationMenu::displayMenu() { 


    cout << "Welcome to the Port." << endl << "Please select one of the 
     following options : " << endl 
     << "1: Dock Ship" << endl; 
    cin >> userChoice; 
    switch (userChoice) 
    { 
    case 1: 

     Ship* ship; 

     ship->name; 


     cout << "Please enter the name of your ship your wish to dock: "; 
     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
     getline(cin, ship->name); 

     cout << ship->name; 
     break; 
    } 
} 

Может кто-нибудь, пожалуйста, сообщите почему я получаю сообщение об ошибке?

Edit:

Эта ошибка была из-за неинициализированный указатель, который был из-за отсутствие знаний о указателях в C++. Хотя на это ответил сообщество, эта ссылка окажется полезной для будущих зрителей. http://www.cplusplus.com/doc/tutorial/pointers/

+0

Вы должны проверять такие ситуации, используя отладчик и прокладывая код за строкой. Какова должна быть цель этой строки кода 'ship-> name;' BTW? –

+0

Это строка, в которой я пытаюсь прочитать ввод пользователя. – PapaSmurf

+0

Да, мы можем это видеть. Но что должна делать эта линия? И не отвлекайся от моего главного совета! –

ответ

2

У вас есть неинициализированный указатель Ship* ship;. Вам необходимо либо использовать Ship* ship = new Ship();, либо объявить корабль как Ship ship;

+0

, что определенно похоже на проблему, но я не знаю, как он даже попадает в этот код. 'userChoice' не обновляется нигде вне конструктора и всегда должен быть 0 – dwcanillas

+1

@dwcanillas Я исхожу из предположения, что он обновил' userChoice' в коде, который он здесь не показывал, поскольку код, который был отправлен, даже не компилируется, так как это не является полным примером. – NathanOliver

+0

Извините, я пропустил это. Я получаю userChoice из 'cin >> userChoice;' – PapaSmurf

1

Ship * ship - это унифицированный указатель, указывающий на случайную ячейку памяти, которую вы затем пытаетесь получить. Вы всегда должны инициализировать указатели на nullptr или действительный объект для предотвращения неопределенного поведения.

Ship* s(new Ship);