Я пытаюсь инициализировать экземпляр класса под названием «Winery», используя список инициализации в конструкторе для другого класса под названием «List». Проблема в том, что когда я передаю конструктору 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];
}
newName
иnewLocation
. Есть ли причина, по которой вы не используетеconst char*
вместоstd::string
? - person Colin Basnett   schedule 11.10.2014item
,nextByName
иnextByRating
в памяти.nextByName
иnextByRating
были инициализированы какNULL
, но все четыре частиitem
по-прежнему имеют в себе значения памяти Visual Studio по умолчанию (0xcdcdcdcd, 0xfeeffeef и т. Д.) И причина, по которой я используюconst char*
, заключается в том, что нам запрещено использоватьstd::string
. - person user3698112   schedule 11.10.2014