我已经实例化了一个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();
};
答案 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是一个向量。