Saya sedang mengembangkan game simulasi di cpp menggunakan Visual Studio 2017 for School dan dalam fase pengembangan saya terjebak dalam situasi ini. Jadi, yang saya lakukan adalah membuat proyek baru untuk mencoba dan membuat ulang masalah itu dalam bentuk yang paling sederhana, sehingga akan lebih mudah untuk di-debug.

Di bawah ini adalah file utama dan semua kode sumber terkait:

Main.cpp

#include "header.h"
#include "Vehicle.h"
#include "Car.h"

int main() {

    Vehicle v;

    v.addCar(1);
    v.addCar(2);
    v.addCar(3);


    cout << v.getCars()[1].id << endl;
    v.getCars()[1].id = 99;
    cout << v.getCars()[1].id << endl;
    system("pause");
    return 0;
}

Header.h

#ifndef CLUSTE2R_H
#define CLUSTE2R_H
#pragma once
#include <iostream>
#include <vector>
using namespace std;  
#endif

Mobil.h

#ifndef CLUSTE1R_H
#define CLUSTE1R_H
#pragma once
#include "Vehicle.h"

using namespace std;


class Car : public Vehicle
{
public:
    int id;
    Car(int id);
    ~Car();
};

#endif

Mobil.cpp

#include "Car.h"

Car::Car(int id)
{
    this->id = id;
}


Car::~Car()
{
}

Kendaraan.h

#ifndef CLUSTER_H
#define CLUSTER_H
#pragma once

#include <vector>
//#include "Car.h"

class Car;
using namespace std;


class Vehicle
{
private:
    vector<Car> cars;

public:
    Vehicle();
    ~Vehicle();

    vector<Car> getCars();
    void addCar(int id);

};

#endif

Kendaraan.cpp

#include "Vehicle.h"
#include "Car.h"
#include <vector>

using namespace std;
//class Car;
Vehicle::Vehicle()
{
}


Vehicle::~Vehicle()
{
}


vector<Car> Vehicle::getCars()
{
    return this->cars;
}

void Vehicle::addCar(int id)
{
    Car c(id);

    cars.reserve(cars.size() + 1);
    cars.push_back(c);
}

Jadi, yang saya coba lakukan adalah mendapatkan output berikut:

2 \n 99

Inilah yang saya dapatkan:

2 \n 2

Apa yang saya lakukan salah? Saya yakin masalah ini terkait dengan file main.cpp. Tetapi saya tidak yakin bagaimana mencapai apa yang saya inginkan dengan cara lain ...

0
António Faneca 13 Desember 2017, 22:55

1 menjawab

Jawaban Terbaik

Saat ini, Anda mengembalikan instance vektor baru ketika Anda memanggil fungsi getCars() dari Kendaraan Anda, ini berarti bahwa semua perubahan pada vektor tidak akan diterapkan ke vektor asli di kelas.

Untuk memperbaikinya, Anda bisa mengembalikan referensi vektor (mengubah vector<Car> getCars(); menjadi std::vector<Car>& getCars()).

Anda juga bisa membuat salinan lokal dari vektor dan kemudian mengatur vektor ke kelas.

1
peti446 13 Desember 2017, 20:04