Почему мой метод установки вызывает ошибку неверного доступа - PullRequest
0 голосов
/ 01 октября 2018

Плохой доступ означает, что я пытаюсь получить доступ к памяти, которой не существует. Я пытался и пытался выделить память для этого класса, но везде потерпел неудачу.Я не знаю, откуда на самом деле происходит ошибка.Это только говорит мне, что мой метод установки - это когда программа падает.В методе setFName () происходит ошибка.Но в основном метод, где это на самом деле происходит.nurse.hpp

#ifndef Nurse_hpp
#define Nurse_hpp

#include <stdio.h>
#include <string>
#include <stdlib.h>
using namespace std;

class nurse{
private:
    string firstName;
public:
    nurse() {
        firstName = "jim";
    }
    string getFName() {return firstName;}
    void setFName(string fName) {firstName = fName;} // Thread 1: bad access 0x0
};

#endif /* Nurse_hpp */

здесь, где ошибка на самом деле происходит main.cpp

#include <cstdint>  // ::std::uint64_t type
#include <cstddef> // ::std::size_t type
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include "nurseHolder.hpp"
using namespace std;

nurseHolder *l = new nurseHolder();

int main() {


 return 0;
}

и, наконец, вот класс, который вызывает проблему nurseHolder.hpp

#ifndef Nurses_hpp
#define Nurses_hpp

#include <stdio.h>
#include <vector>
#include <stdlib.h>
#include "Nurse.cpp"
using namespace std;

class nurseHolder{
private:
    int nurse_cnt;
    int nurse_cap;
    vector<nurse> nurse_list;
public:


    nurseHolder()  {
    nurse_cnt = 0;
    nurse_cap = 10;
    for(int i= 0; i < 11; i++){
        nurse_list[i].setFName("na");
      }
    }
    vector<nurse> &getNurseList() { return nurse_list;}

};

#endif /* Nurses_hpp */

Я пытался сделать этот компакт как можно более извините, если в нем много кода.

вот что я изменил, чтобы заставить код работать:

nurseHolder()  {
        nurse_cnt = 0;
        nurse_cap = 10;
        for(int i= 0; i < 11; i++){
            nurse l;
            nurse_list.pushback(l);
          }
        }

Этоправильный способ сделать это?

1 Ответ

0 голосов
/ 01 октября 2018

Ваш вектор nurse_list имеет размер 0. Поэтому вы не можете использовать оператор [] для задания имен.Это можно исправить двумя способами:

  1. Установите начальный размер вектора и используйте [] для задания имен.
  2. Используйте push_back для добавления элементов в вектор.

Первый метод.

nurse_list.resize(noOfTotalNurses). 
nurse_list[i].setFName("name");

Второй метод.

nurse tNurse; //local nurse object
tNurse.setFName("name");
nurse_list.push_back(tNurse);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...