使用另一个Object作为参数C ++实例化Object时出错

时间:2017-10-13 15:43:04

标签: c++ pointers constructor

我已经实例化了一个Object并根据需要输入了正确数量的参数。但它给了我"错误:没有构造函数的实例"

我传递对象的方式是错误的吗?

要在ContractOfMobile构造函数中作为参数传递的FoneModel对象。

这是我实例化的方式。

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 个答案:

答案 0 :(得分:0)

您的MobileContract构造函数将PhoneModel作为其第三个参数引用。但是你正在创建一个指向PhoneModel的指针,然后传入指向这个指针的指针,因为&#39;&amp;&#39;运算符获取指向您使用它的变量的指针。因此,在您应该传递PhoneModel的地方,您传递的指针指向PhoneModel的指针。如果您更改以下行:

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

所以它写着:

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

然后,而不是使用&#39;&amp;&#39;要获取指向现有指针的指针,您将取消引用指针以获取实际的PhoneModel,然后通过引用传递它。

正如Rakete1111所提到的,你可能也应该使用智能指针而不是原始指针,这将保证最终释放PhoneModel,这当前不会发生,因为你从不调用delete。事实上,在这种情况下,我真的不明白你为什么要使用指针。你的MobileContract构造函数会获取它传递的PhoneModel的副本,并且在传递之后你不会使用PhoneModel进行任何操作,所以它也可能只是堆栈分配。

答案 1 :(得分:0)

感谢所有人,我设法解决了它。

例如。 mc [0] = new ContractOfMobile(“a”,“A”,pA);

mc是一个向量。