实例化使用另一个对象作为参数的对象的错误C++

实例化使用另一个对象作为参数的对象的错误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(); 
}; 
+2

'int&'不是一个指针,你不能传递一个地址给它。另外,请不要使用'new',这是没有必要的。如果您必须在堆上分配,请改用智能指针。 – Rakete1111

您的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是一个向量。