实例化使用另一个对象作为参数的对象的错误C++
问题描述:
我已经实例化一个对象并根据需要输入正确数量的参数。但它给了我“错误:没有构造函数的实例”实例化使用另一个对象作为参数的对象的错误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();
};
答
您的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,因此它可能只是堆栈分配。
答
感谢所有,我设法解决它。
例如。 mc [0] =新的ContractOfMobile(“a”,“A”,pA);
mc是一个向量。
'int&'不是一个指针,你不能传递一个地址给它。另外,请不要使用'new',这是没有必要的。如果您必须在堆上分配,请改用智能指针。 – Rakete1111