C++ 为什么在c+中创建副本构造函数之前需要显式构造函数+;?

C++ 为什么在c+中创建副本构造函数之前需要显式构造函数+;?,c++,constructor,C++,Constructor,我在这里的示例中试图定义一个复制构造函数。然而,我发现如果必须使用复制构造函数,默认/隐式构造函数并不能使编译器满意。为什么会这样?这背后有什么原因吗 class DemoCpyConstructor { private: int priv_var1; int priv_var2; public: void setDemoCpyConstructor(int b1, int b2) { std::cout<<"The Demo

我在这里的示例中试图定义一个复制构造函数。然而,我发现如果必须使用复制构造函数,默认/隐式构造函数并不能使编译器满意。为什么会这样?这背后有什么原因吗

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;
}

无论何时定义任何类型的构造函数(表示转换、复制),并且希望使用默认构造函数,都必须显式提供它。这是规则

这里需要一个:
DemoCpyConstructor oldObj
error: no matching function for call to ‘DemoCpyConstructor::DemoCpyConstructor()’