【问题标题】:C++ no default constructor found for Class?C++没有为Class找到默认构造函数?
【发布时间】:2020-05-17 03:31:46
【问题描述】:

我的一个类收到一个常见错误,即没有为特定类定位默认构造

这是有问题的类及其构造函数

class Campaign {

public:
double funding;
double managerEffectiveness;
Date Day; //determine when they cant spend money anymore

Campaign(double funding, double managerEffectiveness, Date Day) {

funding = funding;
managerEffectiveness = managerEffectiveness;
Day =  Day;

}
};

错误发生在第 8 行,特别是日期日期。这个 Date 类型的变量可以在其他构造函数中以类似的方式成功使用,例如这里是另一个使用 Date 类的类。确切的错误是“日期”类不存在默认构造函数

class electrorateSupport: public Electrorates{

public:
Date Day;
double funding;
double financialEffectiveness();
double fudningImpact();


electrorateSupport(Date Day, double funding,double stanceDistriubtion, int Cluster)
:Electrorates(stanceDistriubtion,Cluster), Day(Day), funding(funding) {

Day = Day;
funding = funding;

}
);

这个类类似于 Campaign 类,唯一的大区别是它是一个继承自另一个的子类。我一直在比较这两个类以找到可能导致我的错误的任何其他差异,但我无法确定任何差异。我也尝试多次重写该类,但仍然没有明确的问题。感谢您的帮助!

已提供编辑日期类

class Date {
     public:
     int Day;
     int Month;
     int Year;

     Date(int day, int month, int year) {
            this->Day = day;
            this->Month = month;
            this->Year = year;
        }

     void setDay(int day)
        {
            Day = day;
        }

        void setMonth(int month)
        {
          Month = month;
        }

       void setYear(int year)
        {
           Year = year;
        }

            int getDay()
        {
            return Day;
        }

        int getMonth()
        {
            return Month;
        }

        int getYear()
        {
            return Year;
        }

};

【问题讨论】:

  • Date 长什么样子?
  • 什么是Date
  • "Day = Day" -- 你希望通过给自己分配一个对象来完成什么?这是您期望在这里发生的事情吗?如果不是,那你肯定错了,因为这就是 在这里发生的事情。看来你需要学习如何使用构造函数的初始化部分。
  • electrorateSupport 的构造函数在其构造函数初始化列表中初始化 DayCampaign 的构造函数没有,这意味着它需要默认初始化,但它显然缺少默认构造函数。
  • 你需要了解更多关于构造函数的知识,阅读这篇geeksforgeeks.org/constructors-c

标签: c++ class constructor


【解决方案1】:

问题不在于 Date 类,

什么是默认构造函数(错误消息)是没有参数的构造函数, 所以你需要有一个没有参数的构造函数,即使它没有声明。

这边:

Campaign() {}

这应该可以解决您的问题。

注意:错误位置有时令人困惑,不要问我为什么。

【讨论】:

    【解决方案2】:

    一旦您为构造函数提供任何类型的参数,编译器将不再为您提供默认构造函数without asking it to

    你仍然可以得到编译器提供的默认构造函数

    Campaign()=default;
    

    这与其他special member functions 可能会被显式默认或删除,以强制编译器为您生成一个。

    你也可以只写一个空的默认构造函数

    Campaign(){}
    

    only slight changes来语义

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 2012-01-10
      • 2018-03-09
      • 2023-03-20
      • 2016-07-18
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多