2017-10-13 16 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最終得到釋放,這是目前沒有發生的,因爲你永遠不會調用delete。事實上,在這種情況下,我真的不明白你爲什麼使用指針。您的MobileContract構造函數會傳遞它傳遞的PhoneModel的副本,並且在傳遞它之後不會使用PhoneModel,因此它可能只是堆棧分配。

0

感謝所有,我設法解決它。

例如。 mc [0] =新的ContractOfMobile(「a」,「A」,pA);

mc是一個向量。

相關問題