Невозможно скопировать элементы структуры в другую структуру - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть структура Node и структура UniqueInstructor.Оба являются односвязными списками.Я уже заполнил struct Node некоторыми значениями.Теперь мне нужно заполнить вторую структуру UniqueInstructor специальным значением Node (std::string instructor).

Вот так выглядят мои структуры:

// main struct that I already filled with data

struct Node {
    Node* pNext;
    std::string data1;
    std::string data2;
    std::string day;
    std::string group;
    std::string instructor; // these are the items I want to copy
                            // into the UniqueInstructor struct
    std::string course;
};

// my 'target' struct, also linked list

struct UniqueInstructor {
    UniqueInstructor* pNext;
    std::string instructor;
};

Пока все, что мне нужно сделать, это скопировать все значения std::string instructor из Node в UniqueInstructor.

Я пробовал кучу вещей, таких как:

void DuplicateInstructor(Node *&pHead)
{
    pHead = new UniqueInstructor { pHead, pHead->instructor };
}

, но я получаю ошибки.В этом случае: cannot convert 'Node*' to 'UniqueInstructor*' in initialization

Моя проблема, вероятно, заключается в передаче структуры в эту функцию.Прошу прощать, я новичок в структурах и указателях.Спасибо за помощь.

1 Ответ

0 голосов
/ 23 декабря 2018

Вам просто нужно скопировать поле Node::instructor в поле UniqueInstructor::instructor.Оба поля std::string, так что это не проблема.

void like_this(Node& n, UniqueInstructor& i)
{
    i.instructor = n.instructor;
}

Теперь не очень понятно, чего вы на самом деле пытаетесь достичь и какова структура вашей программы, поэтому я не могу сказать вам, где и как вы получитеInstructor объект.В приведенном выше примере оба объекта существуют.Также вы не можете связать Node с UniqueInstructor.Просто Node::pNext и UniqueInstructor::pNext имеют совершенно разные типы, поэтому я не знаю, что вы здесь пытаетесь сделать.

Более того, явные вызовы new / delete - очень плохая практика.Им абсолютно нет места в C ++ (вне реализаций библиотеки).Слишком большая головная боль и, что еще важнее, слишком много места для ошибок (утечки памяти в исключениях).Пожалуйста, прочитайте о RAII и умных указателях в C ++.

...