我有两个类,ISBN, Order。我有一个ISBN对象作为我的Order类的数据成员,我在Order构造函数将ISBN对象置于安全的空状态时遇到了问题。
我Order.h#include <iostream>
using namespace std;
class ISBN;
class Order {
int ordered;
int delivered;
ISBN * book;
bool empty;
public:
Order();
Order(const ISBN & isbn);
};
我ISBN.h #include <iostream>
using namespace std;
class ISBNPrefix;
class ISBN {
char isbnNum[13];
char area[6];
char publisher[8];
char title[7];
char checkDigit[1];
bool emptycheck;
bool registered;
public:
ISBN();
ISBN(const char * str, const ISBNPrefix& list);
}
在我的Order构造函数中,我尝试了以下代码:
Order::Order() {
ordered = 0;
delivered = 0;
empty = true;
*book->ISBN();
/*
(*book).isbnNum[0] = ' ';
book.area[0] = ' ';
book.publisher[0] = ' ';
book.title[0] = ' ';
book.checkDigit[0] = ' ';
book.emptycheck = true;
book.registered = false; */
}
和它的变化,但我得到错误,如:"类型名称是不允许的"表达式必须有指针类型"等…有人知道我的问题是什么吗?
这里肯定不需要指针,只需要一个ISBN
对象作为数据成员:
ISBN book;
This将使用其默认构造函数自动初始化;你不需要做任何事情。如果您想使用其他构造函数(带参数)初始化它,则需要在初始化器列表中进行初始化:
Order::Order() : book(some_string, some_list)
{
// body of constructor
}
您有问题,因为您已将book
声明为ISBN*
。因此,您发布的*book->ISBN();
行试图解引用null,然后调用空白构造函数。
如果您想手动分配book
,那么您应该使用以下模式:
Order::Order() {
ordered = 0;
delivered = 0;
empty = true;
book = new ISBN();
}
注意,这将要求Order
的析构函数对book
成员调用delete。
您可以自动分配和删除book
作为ISBN
通过使其成为类成员,而不是指针。为此,使用以下声明:
class Order {
ISBN book;
... // your other members
}
这将在分别创建和销毁Order
类时自动分配和释放ISBN
对象成员。