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