2017-10-13 1 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コンストラクタは、第3引数としてPhoneModelへの参照を受け取ります。しかし、 '&'演算子は、使用する変数へのポインタを取得するため、PhoneModelへのポインタを作成してからこのポインタへのポインタを渡しています。 PhoneModelを渡すことになっているところで、PhoneModelへのポインタへのポインタを渡しています。それは読むよう

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

:あなたは次の行に変更した場合、既存のポインタへのポインタを取得するには「&」を使用するのではなく、その後

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

を、あなたは逆参照のポインタを取得するでしょう実際のPhoneModelは参照によって渡されます。

Rakete1111に言及されているように、未処理のポインタの代わりにスマートポインタを使用して、PhoneModelが最終的に解放されることを保証する必要があります。実際、この場合、なぜポインタを使用しているのかわかりません。あなたのMobileContractコンストラクタは渡されたPhoneModelのコピーを取り、それを渡した後に何かのためにPhoneModelを使用しないので、スタックに割り当てられるだけかもしれません。

0

私はそれを解決することができました。

例えば、 mc [0] =新しいContractOfMobile( "a"、 "A"、pA);

mcはベクターです。

関連する問題