2017-10-13 8 views
-1

객체를 인스턴스화하고 필요한만큼 정확한 매개 변수 수를 입력했습니다. 하지만 그것은 나를 준다 "오류 : 생성자의 인스턴스가 없습니다"다른 객체를 매개 변수로 사용하는 객체의 인스턴스화 오류 C++

내가 잘못 개체를 전달하는 방법은 무엇입니까?

FoneModel ContractOfMobile 생성자에서 매개 변수로 전달할 개체입니다.

이것은 내가 인스턴스화 한 방식입니다.

int main() 
{ 
//testing with 1 vector 

    vector <ContractOfMobile *> mc(1); 
    FoneModel *pA =new FoneModel ("ipX","white", 1800.0); 

    ContractOfMobile *mC1 = new ContractOfMobile ("planA","C1",&pA); 
    //above line has an error no instance of Constructor MobileContract* matches the argument list 

    mc.push_back(mC1); 


    cin.ignore(); 
}; 
+2

'int &'는 포인터가 아니며 주소를 전달할 수 없습니다. 또한'new'를 사용하지 마십시오. 필요 없습니다. 힙에 할당해야하는 경우 대신 스마트 포인터를 사용하십시오. – Rakete1111

답변

0

MobileContract 생성자는 PhoneModel을 세 번째 인수로 사용합니다. 그러나 '&'연산자가 사용하는 변수에 대한 포인터를 가져 오기 때문에 PhoneModel에 대한 포인터를 만든 다음이 포인터에 대한 포인터를 전달합니다. 따라서 PhoneModel을 전달해야하는 곳에서는 포인터에 대한 포인터를 PhoneModel에 전달합니다. 이 읽 그래서

MobileContract *mC1 = new MobileContract("planA","A1",&pA); 

: 당신이 다음 줄을 변경하는 경우 기존의 포인터에 대한 포인터를 얻을 수있는 '&'를 사용하는 대신 다음

MobileContract *mC1 = new MobileContract("planA","A1",*pA); 

을, 당신은 역 참조에게 포인터가 얻을 것이다 실제 PhoneModel은 참조로 전달됩니다.

Rakete1111에서 언급했듯이 원시 포인터 대신 스마트 포인터를 사용해야하므로 PhoneModel이 결국 해제되므로 결국 삭제되지 않는 상황이 발생하지 않습니다. 사실,이 경우 포인터를 사용하는 이유를 실제로 볼 수 없습니다. MobileContract 생성자는 전달 된 PhoneModel의 복사본을 가져오고, PhoneModel을 전달한 후에는 PhoneModel을 사용하지 않으므로 할당 된 스택 일 수 있습니다.

0

덕분에 문제를 해결할 수있었습니다.

예 : mc [0] = 새로운 ContractOfMobile ("a", "A", pA);

mc는 벡터입니다.