c – 将一个类作为参数传递,该参数具有不带参数的私有构造函数
模拟器应该在其中携带一个导弹对象的副本.但是Missile没有零参数的公共构造函数,所以我无法将它作为参数传递.
我正在使用Visual Studio 2010,它会出现以下错误:
那么,如何将具有私有构造函数的类的对象作为参数传递? (注意:我的代码没有入口点.我只是想把它编译成一个库.) Missile.h #ifndef MISSILE_H #define MISSILE_H class Missile { public: Missile(double xm0,double ym0,double Vmx0,double Vmy0); ~Missile(); private: Missile(); // Line #11 }; #endif Missile.cpp #include "Missile.h" Missile::Missile(double xm0,double Vmy0) { } Missile::Missile() { } Missile::~Missile() { } Simulator.h #ifndef SIMULATOR_H #define SIMULATOR_H #include "Missile.h" class Simulator { public: Simulator(const Missile & missile); ~Simulator(); private: Missile m_Missile; }; #endif Simulator.cpp #include "Simulator.h" Simulator::Simulator(const Missile & missile) { // Line #4 m_Missile = missile; // Line #5 } Simulator::~Simulator() { } 解决方法
您可以使用所谓的ctor-initializer(有些人称之为“初始化列表”,尽管C标准实际上将其称为“ctor-initializer”):
// In your Simulator.cpp file: Simulator::Simulator(const Missile & missle) : m_Missile(missle) /*^^^^^^^^^^^^^^^^*/ /* This part here */ { /* No assignment needed */ } 这相当于调用Missile类的复制构造函数,它是由编译器自动生成的,它所做的就是复制每个数据成员: class Missile { public: Missile(double xm0,double Vmy0); ~Missile(); // Compiler generated copy constructor Missile(const Missile& rhs) /* copies each data member */ { } // Compiler generated copy assignment operator Missile& operator=(const Missile& rhs) { /* copies each data member */ } private: Missile(); // default constructor }; 请注意,Simulator类也将具有编译器生成的复制构造函数和复制赋值运算符. 如果没有c-tor初始化程序,则会默认初始化Missile成员,这将调用默认构造函数,您已声明它是私有的. You should always use 这在C中实际上是一个相当基本的概念,任何good book on C++都将涵盖构造函数和编译器生成的函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |