2014-12-29 59 views
-1

我想在这里的例子中定义一个拷贝构造函数。但是,我发现如果必须使用复制构造函数,默认/隐式构造函数不会使编译器很高兴。为什么这样?它背后有什么理由吗?为什么在C++中创建复制构造函数之前需要显式构造函数?

class DemoCpyConstructor 
{ 

private: 

    int priv_var1; 
    int priv_var2; 

public: 

    void setDemoCpyConstructor(int b1, int b2) 
    { 
     std::cout<<"The Demo Cpy Constructor Invoked"<<std::endl; 
     priv_var1 = b1; 
     priv_var2 = b2; 

    } 

    void showDemoCpyConstructor() 
    { 
     std::cout<<"The priv_var1 = "<<priv_var1<<std::endl; 
     std::cout<<"The priv_var2 = "<<priv_var2<<std::endl; 
    } 

    DemoCpyConstructor(const DemoCpyConstructor &oldObj) 
    { 
     std::cout<<"Copy Constructor Invoked.."<<std::endl; 
     priv_var1 = oldObj.priv_var1; 
     std::cout<<"Tweaking the copy constructor"<<std::endl; 
     priv_var2 = 400; 
    } 


}; 


int main(int argc, char *argv[]) 
{ 
    DemoCpyConstructor oldObj; 
    oldObj.setDemoCpyConstructor(120,200); 
    oldObj.showDemoCpyConstructor(); 

    DemoCpyConstructor newObj = oldObj; 

    newObj.showDemoCpyConstructor(); 

    return 0; 
} 

这是个什么错误,我得到 -

error: no matching function for call to ‘DemoCpyConstructor::DemoCpyConstructor()’ 
+0

这里你需要一个:'DemoCpyConstructor oldObj;' –

回答

1

无论何时定义任何构造的(意味着转换,副本),并要使用默认的,以及你必须明确地提供它。它的规则

相关问题