我试图使用构造函数中另一个名为“ List”的类的初始化列表来初始化名为“ Winery”的类的实例。问题是,当我将Winery构造函数交给酿酒厂复制时,它无法复制信息。
这是Winery类的头文件:
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;
};
这是我的List类的头文件的相关部分:
struct Node
{
Node(const Winery& winery);
Winery item;
Node *nextByName;
Node *nextByRating;
};
这是我的List类中的构造函数:
List::Node::Node(const Winery& winery) :
item(winery.getName(), winery.getLocation(), winery.getAcres(), winery.getRating()),
nextByName(nullptr),
nextByRating(nullptr)
{
}
从我看来,似乎我正在做我需要做的所有事情。我要传递给构造函数的酿酒厂的数据成员是私有的,因此我试图通过获取信息的函数来获取它们。他们处于适当的顺序,一切正常。在初始化指针之后,指针可以正常工作,但是信息不存在,所以我真的不知道在这里做什么。如果您想知道,这是用于分配的,我们必须使用初始化列表(我在没有初始化列表的情况下尝试了它,而且也不起作用,所以我真的不知道该怎么做)。我将不胜感激任何帮助!谢谢!
编辑:这是我的Winery构造函数:
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];
}
从它的外观来看,这些行:
char *newName = new char[sizeof(name) + 1];
char *newLocation = new char[sizeof(location) + 1];
实际上根本不执行任何操作,因为location
和name
字符串没有分配或编写,这可能是问题的根源。您的acres
和rating
应该已经正确构建。
这是我创建的工作版本(此处为ideone-> http://ideone.com/v98zpq)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class Winery
{
public:
Winery(const char * const name, const char * const location, const int acres, const int rating) :
name(strdup(name)),
location(strdup(location)),
acres(acres),
rating(rating)
{
}
virtual ~Winery(void)
{
free(name);
free(location);
}
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::Node(const Winery& winery) :
item(winery.getName(), winery.getLocation(), winery.getAcres(), winery.getRating())
{
}
int main()
{
Winery winery("Mission Hill Winery", "Kelowna, BC, Canada", 646, 4);
Node node(winery);
printf("%s\n", node.item.getName());
printf("%s\n", node.item.getLocation());
printf("%i\n", node.item.getAcres());
printf("%i\n", node.item.getRating());
}
输出:
Mission Hill Winery
Kelowna, BC, Canada
646
4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句