Erstellen von shared_ptr Referenz

Ich bin relativ neu in C++ und diese Nähte wie eine noob Frage, aber ich war nicht in der Lage, es zu lösen, mit anderen Quellen im internet.

Ich versuche zu schaffen, ein shared_ptr von einem Verweis. Ich habe folgende Book Klasse:

#include <memory>
#include "Author.hpp"

class Book
{
   public:
      void setAuthor(const Author& t_author);

   private:
      std::shared_ptr<Author> m_author;
}

Und das ist mein Author Klasse:

#include <memory>
class Book;

class Author
{
   public:
      void addBook(const Book& t_book);

   private:
      std::vector<std::weak_ptr<Book>> m_books;
}

Ich müde zur Umsetzung der Book::setAuthor Methode etwa so:

void Book::setAuthor(const Author& t_author)
{
   m_author = std::shared_ptr<Author>(&t_author);
}

Aber wenn ich versuche zu kompilieren, das ich bekommen:

Invalide Konvertierung von const Autor* Autor*

Invalide Konvertierung von sizeof const Autor

Können Sie mir bitte sagen, was falsch ist mit meinem code? Ich habe auch versucht, das gleiche mit dem weak_ptr-aber das funktioniert auch nicht.

Ich glaube, Sie sollten std::vector<Book> und std::vector<Author>. Keine Zeiger, keine std::shared_ptr keine std::weak_ptr. Verwalten der Beziehung zwischen Büchern und Autoren in der relationale Datenbank; was Sie sind für. Behandlung der std::vector<Book> und std::vector<Author> Objekte als vorübergehend benötigt Ergebnisse von Datenbank-Abfragen.
Du hast Recht und ich will auch, aber ich würde gerne eine ORM-Bibliothek und dort habe ich vectors von shared_ptr zur Darstellung des viele Beziehungen. Oder gibt es einen anderen Weg, dies zu tun?
Nun, warum nutzen Sie die Bibliothek, wenn es zwingt Sie verwenden eine fehlerhafte Konstruktion? ORM ist nicht ein Ziel in sich selbst.
Okay danke ich werde darüber nachdenken. Aber bin ich richtig, dass ich std::vector<Book*> dann, weil die Klassen (Header) sind voneinander abhängig und ich habe mit vorwärts-Deklaration für eine Klasse (hier Book)?
Ja, wenn Book enthält eine std::vector<Author> und eine Author enthält eine std::vector<Book>, dann hätten Sie eine unendliche Rekursion, es ist also nicht möglich. Ich denke, eine wichtige Frage wurde nicht gefragt so weit: Was Operationen, die Sie auf dieser Datenstruktur? Wenn, z.B., das Ziel ist zum anzeigen einer Liste der Bücher, mit einer Liste von Autoren für jedes Element, dann ist es nicht notwendig, für Author enthalten std::vector<Book>.

InformationsquelleAutor Cilenco | 2017-02-08

Schreibe einen Kommentar