**** Извините за путаницу в отношении numCars в оригинальном сообщении. Я изменил код, чтобы он соответствовал оригинальному ******
Следующая академическая программа является упрощенной версией исходной проблемы, но она сосредоточена на проблеме, которую мне еще предстоит решить. Есть 2 класса и основной метод для этой проблемы, и 2 класса состоят из класса Dealer и класса Car. Класс Dealer имеет частный указатель Car *, который инициализируется динамическим массивом в конструкторе Dealer. Ошибка возникает в основном методе, когда вызывается метод addCar Дилера.
В основном методе я намеренно передаю переменную Dealer в метод addCar (Dealer & d), чтобы имитировать структуру исходного приложения. Затем метод addCar вызывает метод дилера addCar (const Car & car), где нарушение прав доступа происходит, когда я выполняю cars [numCars ++] = car; Можете ли вы объяснить, почему автомобили [numCars ++] = машина приводят к нарушению прав доступа
/**********************************Dealer.h**************************/
#include <cstdlib>
#include "Car.h"
using namespace std;
class Dealer
{
public:
Dealer(int maxCars = DEFAULT_MAX_CARS)
: numCars (0)
{cars = new Car [maxCars];}
~Dealer(){delete [] cars;}
int getTotalCars() const { return numCars;}
void addCar(const Car& car)
{
cars[numCars++] = car; // Access Violation
}
Car* begin(){return cars;};
Car* end(){ return cars + numCars;}
setNumCars (int count) {numCars = count;}
private:
static const int DEFAULT_MAX_CARS = 10;
Car* cars;
int numCars;
};
/**********************************Car.h**********************/
#include <cstdlib>
#include <string>
using namespace std;
class Car{
public:
Car()
: year(0), make(""), model("")
{}
Car(int year, string make, string model)
: year(year), make(make), model(model)
{}
string getMake() const {return make;}
void setMake(string make){this->make=make;}
string getModel() const {return model;}
void setModel(string model){this->model=model;}
int getYear() const {return year;}
void setYear(int year){this->year=year;}
private:
int year;
string make;
string model;
};
ostream& operator<< (ostream& out, const Car& car)
{
out << car.getYear() << " " << car.getMake() << " " << car.getModel();
return out;
}
/**********************************Main.cpp**********************/
#include <cstdlib>
#include <iostream>
#include "Dealer.h"
using namespace std;
void addCar(Dealer& d);
int main(int argc, char *argv[])
{
Dealer d;
addCar(d);
system("PAUSE");
return EXIT_SUCCESS;
}
void addCar(Dealer& d)
{
d = Dealer();
d.addCar(Car(2007, "Honda", "Civic"));
cout << d.getTotalCars() << " total cars" << endl;
}