2016-11-02 6 views
0

개체의 포인터 배열에 개체를 추가하는 데 문제가 있습니다. 저는 여기에 대해 이야기 할 것입니다 함수의 :개체에 대한 포인터 배열에 개체 추가

void add(Car **cars, int number) { 
    Car *fresh = new Car; 
    fresh = new Car; 
    cout << "Enter the name of your car." << endl; 
    cin >> fresh->name; 
    cout << "Enter max velocity of your car." << endl; 
    cin >> fresh->maxV; 
    cout << "Enter weight of your car." << endl; 
    cin >> fresh->weight; 
    delete[number-1] cars; 
    cars[number-1] = fresh; // here's something wrong 
} 

내가 포인터 **cars의 배열에 number의 클로 자동차를위한 메모리를 할당하고 내가 먼저 지난 메모리 삭제, 배열의 끝에 새로운 객체 fresh를 추가하려고 개체의 포인터 배열의 인덱스 및 다음 배열의 마지막 인덱스 참조를 전달하지만 오류가 발생합니다. 웹에서 비슷한 주제를 찾지 못해 스스로 문제를 해결하려고했습니다. 누군가가 나를 풀 수있는 방법을 알려주기를 바랍니다. 도와 주셔서 감사합니다.

+0

어디서 오류가 발생합니까? 'new Car'는 무효 문법처럼 보입니다. –

+0

함수의 마지막 줄에 'cars'배열의 'number-1'인덱스에 'fresh'참조를 전달하려고하면 오류가 발생합니다. – BlackHawk

+0

포인터를 전달하기 전에'malloc' 자동차를 사용 했습니까? –

답변

-1

당신은 그래서 당신이 다음 할 수있는

std::vector<Car> cars; 

를 사용하는 경우 그것은 더 좋을 수 :

cars.push_back(fresh); 

을 그리고 그게 다야. 죄송합니다 내 영어에 대해서

+0

많은 것들이 더 많이 나올지 모르지만 'Car'가 PlainOldData 형 객체가 아닌 경우에 복잡함 – infixed

0

삭제 진술이 필요하지 않습니다. 코드는 이미 '자동차'에 대한 메모리를 할당 한 경우 이와 같을 것입니다.

Car *fresh = new Car; 
cars[number-1] = fresh; //number here should be index starting from 1 not number of Car objects 

자동차는 add() 메소드를 호출하기 전에 다음과 같이 초기화됩니다. 당신이 그렇지 않으면 cars[number-1] 사용

delete cars[number-1]; 

을 위해 할당 된 메모리를 삭제해야하는 경우

Car ** cars = new (Car *)[number]; 
0

, 당신은 fresh를 할당 두 번 new를 호출 할 필요가 없습니다. 그래서, 다음은

void add(Car **cars, int number) { 
    Car *fresh = new Car; 

    cout << "Enter the name of your car." << endl; 
    cin >> fresh->name; 

    delete cars[number-1]; 
    cars[number-1] = fresh; 
} 

작동합니다 그리고 당신은 number 당신의 자동차 배열의 크기 있는지 확인해야합니다.