Я пытаюсь инициализировать экземпляр класса под названием «Winery», используя список инициализации в конструкторе для другого класса «Список». Проблема в том, что когда я передаю конструктору 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;
};
Вот соответствующая часть заголовка файла для моего класса 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)
{
}
Из того, что я вижу, похоже, что я делаю все, что мне нужно делать. Члены данных винного завода, которые я передаю конструктору, являются частными, поэтому я пытаюсь получить их через функции, которые получают информацию. Они в правильном порядке и все такое. Указатели работают очень хорошо после того, как я их инициализировал, но информации там нет, поэтому я действительно не знаю, что здесь делать. Если вам интересно, это для назначения, и мы должны использовать списки инициализации (я пробовал это без них, и это не работает, поэтому я действительно не знаю, что делать). Я был бы очень признателен за любую помощь! Спасибо!
EDIT: Вот мой 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'? –
Я имею в виду, что когда конструктор прошел список инициализации, я смотрю на 'item',' nextByName' и 'nextByRating' в памяти. 'nextByName' и' nextByRating' были инициализированы на 'NULL', но все четыре части' item' по-прежнему имеют значения памяти по умолчанию для Visual Studio (0xcdcdcdcd, 0xfeeffeef и т. д.) И причина, по которой я использую 'const char * '- это потому, что нам запрещено использовать' std :: string'. – user3698112