我试图初始化一个名为“Winery”的类的实例,它使用构造函数中的另一个名为“List”的类的初始化列表。问题是,当我将Winery构造函数交给酒庄进行复制时,它无法复制信息。在构造函数中的C++初始化列表
这将在酒厂类的头文件:
class Winery
{
public:
Winery(const char * const name, const char * const location, const int acres, const int rating);
virtual ~Winery(void);
const char * const getName() const { return name; }
const char * const getLocation() const { return location; }
const int getAcres() const { return acres; }
const int getRating() const { return rating; }
private:
char *name;
char *location;
int acres;
int rating;
};
这里是头文件对我的列表类的相关部分:
struct Node
{
Node(const Winery& winery);
Winery item;
Node *nextByName;
Node *nextByRating;
};
这里是我的列表类的构造函数:
List::Node::Node(const Winery& winery) :
item(winery.getName(), winery.getLocation(), winery.getAcres(), winery.getRating()),
nextByName(nullptr),
nextByRating(nullptr)
{
}
从我看到的,它看起来像我正在做我需要做的一切。我传递给构造函数的酒厂的数据成员是私有的,所以我试图通过获取信息的函数来获取它们。他们处于正确的秩序和一切。指针在我初始化之后工作得很好,但信息不存在,所以我真的不知道该怎么做。如果你想知道,这是一个任务,我们必须使用初始化列表(我试过没有它们,这不起作用,所以我真的不知道该怎么做)。我将不胜感激任何帮助!谢谢!
编辑:这是我的酒厂构造:
Winery::Winery(const char * const name, const char * const location, const int acres, const int rating) :
acres(acres),
rating(rating)
{
char *newName = new char[sizeof(name) + 1];
char *newLocation = new char[sizeof(location) + 1];
}
你必须定义你的意思是 “无法复制的信息”因为这可能意味着什么。析构函数是什么样的?我的猜测是析构函数正在删除'newName'和'newLocation'字符串。有没有理由你不使用'const char *'而不是'std :: string'? – 2014-10-11 03:10:06
我的意思是,当构造函数已经通过初始化列表时,我查看内存中的'item','nextByName'和'nextByRating'。 'nextByName'和'nextByRating'已经被初始化为'NULL',但是'item'的所有四个部分仍然具有Visual Studio默认的内存值(0xcdcdcdcd,0xfeeffeef等),而我使用'const char *'是因为我们被禁止使用'std :: string'。 – user3698112 2014-10-11 03:20:43