c – 将一个类作为参数传递,该参数具有不带参数的私有构造函数

c – 将一个类作为参数传递,该参数具有不带参数的私有构造函数,第1张

概述模拟器应该在其中携带一个导d对象的副本.但是Missile没有零参数的公共构造函数,所以我无法将它作为参数传递. 我正在使用Visual Studio 2010,它会出现以下错误: Error 1 c:…\simulator.cpp Line #5 error C2248: ‘Missile::Missile’ : cannot access private member declared in 模拟器应该在其中携带一个导d对象的副本.但是Missile没有零参数的公共构造函数,所以我无法将它作为参数传递.

我正在使用Visual Studio 2010,它会出现以下错误:

Error 1 c:…\simulator.cpp line #5
error C2248: ‘Missile::Missile’ :
cannot access private member declared
in class ‘Missile’

Error 2 c:…\simulator.cpp line #4
IntelliSense: “Missile::Missile()”
(declared at line 11 of
“c:…\Missile.h”) is inaccessible

那么,如何将具有私有构造函数的类的对象作为参数传递?

(注意:我的代码没有入口点.我只是想把它编译成一个库.)

Missile.h

#ifndef MISSILE_H#define MISSILE_Hclass 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(){}
解决方法@H_301_56@ 您可以使用所谓的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-tor initializers when you can,因为它比在构造函数中分配成员变量更通用.

这在C中实际上是一个相当基本的概念,任何good book on C++都将涵盖构造函数和编译器生成的函数.

总结

以上是内存溢出为你收集整理的c – 将一个类作为参数传递,该参数具有不带参数的私有构造函数全部内容,希望文章能够帮你解决c – 将一个类作为参数传递,该参数具有不带参数的私有构造函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1214007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存