Я отношусь к C++ с новым релятивизмом, и этот шов, как вопрос о нобе, но я не смог его решить с помощью других ресурсов в Интернете.Создайте shared_ptr со ссылкой
Я пытаюсь создать shared_ptr из ссылки. У меня следующий Book
класс:
#include <memory>
#include "Author.hpp"
class Book
{
public:
void setAuthor(const Author& t_author);
private:
std::shared_ptr<Author> m_author;
}
И это мой Author
класс:
#include <memory>
class Book;
class Author
{
public:
void addBook(const Book& t_book);
private:
std::vector<std::weak_ptr<Book>> m_books;
}
Я устал реализовать метод Book::setAuthor
следующим образом:
void Book::setAuthor(const Author& t_author)
{
m_author = std::shared_ptr<Author>(&t_author);
}
Но если я пытаюсь скомпилировать это я получаю:
Invalide преобразование сопзЬ Автор * до * Автор
Invalide преобразование из SizeOf в сопзЬ Автор
Можете ли вы сказать мне, что случилось с моим кодом? Я также пробовал то же самое со слабым_ptr, но это тоже не работает.
Я думаю, вы должны использовать 'std :: vector' и 'std :: vector '. Нет указателя, нет 'std :: shared_ptr', no' std :: weak_ptr'. Управлять отношениями между книгами и авторами в ** реляционной базе данных **; для чего они нужны. Рассматривайте объекты 'std :: vector ' и 'std :: vector ' как временно необходимые результаты запросов к базе данных. –
@ChristianHackl Вы правы, и я также хочу этого, но я хотел бы использовать библиотеку ORM (http://www.codesynthesis.com/products/odb/), и там я должен использовать 'vectors'' shared_ptr 'для представления отношений [от одного до многих] (http://www.codesynthesis.com/products/odb/doc/manual.xhtml#6.2.2). Или есть другой способ сделать это? – Cilenco
@Cilencio: Ну, зачем использовать библиотеку, если она заставляет вас использовать испорченный дизайн? ORM не является самоцелью. –