我的菜单中未处理的异常

时间:2015-04-01 17:11:02

标签: c++ class exception getline

我目前在代码中遇到未处理的异常,我不明白为什么。这是我第一次使用多个课程。

目前我正在尝试将用户输入放入另一个类的字符串中。我试图将用户输入输入到下面的类

中名为name的字符串中
#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;
    }
}

有人可以告诉我为什么会收到错误吗?

编辑:

这个错误是因为一个未初始化的指针,这是由于缺乏对C ++中指针的了解。尽管社区已经回答了这个问题,但这个链接对未来的观众有用。 http://www.cplusplus.com/doc/tutorial/pointers/

2 个答案:

答案 0 :(得分:2)

你有一个未初始化的指针Ship* ship;。您需要使用Ship* ship = new Ship();或将广告宣布为Ship ship;

答案 1 :(得分:1)

Ship * ship是一个指向随机存储位置的单位指针,然后您尝试访问该位置。您应该始终初始化指向 nullptr 或有效对象的指针,以防止未定义的行为。

Ship* s( new Ship );