我的教授给了我们这堂课,并告诉我们它将不会编译。他说,捐助者数组将与构造函数冲突。那么...为什么会这样呢?

我认为Donor数组的名称可以做到这一点,但这不应该成为问题,因为成员数组donor的名称区分大小写,因此与类名不同。

这是代码:

#ifndef DONORS_H
#define DONORS_H

#include <string>

#include "name.h"
#include "donor.h"

using namespace std;

const int
    DONORS_LOAD_ERROR = 1,
    DONORS_UPDATE_ERROR = 2,
    DONORS_ADD_ERROR = 3;

const int MAX_DONORS = 100;

class Donors {
public:
    Donors() : size(0) {}
    void load(string filename);
    int getSize() {return size;}
    int find(Name name);
    int add(Name name);
    int add(Name name, Donation donation, int ytd);
    void processDonation(Name name, Donation donation);
    void update(string filename);
    void print();
private:
    Donor donorsList[MAX_DONORS];
    int size;
};

#endif


教授写道:


  在此版本中,我们采用了版本2,添加了构造函数,并最大限度地使用了对象。


但是,构造函数的引入打破了Donors类内部数组数据成员的声明;
因此,此版本无法编译!!!!

我一直在和一个同学讨论这件事,我们都很沮丧。这个C ++类怎么了?

编辑:

编译器消息如下所示:



我只是想到Donor类有一个构造函数。既然我们还没有用十英尺的杆触及矢量,那么我们应该怎么编译呢?

编辑2:

这是捐助者类:

#ifndef DONOR_H
#define DONOR_H

#include "name.h"
#include "donation.h"

using namespace std;

class Donor {
public:
    Donor(Name n, Donation ld=Donation(0, 0), int y=0) : name(n), lastDonation(ld), ytd(y) {}
    Name getName() {return name;}
    Donation getLastDonation() {return lastDonation;}
    int getYtd() {return ytd;}
    void processDonation(Donation d);
private:
    Name name;
    Donation lastDonation;
    int ytd;
};

#endif

最佳答案

没有Donor类的定义很难说,但我的猜测是他在Donor类中添加了带有参数的构造函数,因此不再有隐式默认构造函数。

但是现在,如果没有默认构造函数,即没有参数就可以调用的构造函数,则无法声明此类数组,因为无法传递所需的参数!

关于c++ - 此类C++声明有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9774694/

10-10 03:01