Имя, Документы, Книги не были объявлены в этой области не-функция C++

У меня ошибка при объявлении функции, не являющейся членом listOverview();

  void listOverview()
  {

  std::cout << "Overview of books of " << name << std::endl;
  for (auto p : books)
    {
    std::cout << p.toString() << std::endl;
    }
  std::cout << "Overview of papers of " << name << std::endl;
  for (auto p : papers)
    {
    std::cout << p.toString() << std::endl;
    }
  }

Компилятор говорит, что названия документов и книг не были объявлены в этой области. Я пробовал несколько вещей, таких как создание функции-друга, но затем в основном говорится, что у класса Biblioagraphy нет члена с именем listOverview();

Это мой заголовок:

#ifndef BIBLIOGRAPHY_H
#define BIBLIOGRAPHY_H
#include <string>
#include <vector>


class Book;
class Paper;

class Bibliography
  {
  public:
    Bibliography(const std::string & aName);

    void addBook(const Book * newBook);
    void addPaper(const Paper *newPaper);
    int giveNrOfBooks() const {return books.size();}
    int giveNrOfPapers() const {return papers.size();}
    void listOverview();
//    std::vector<std::shared_ptr<Publication>> givePubWithIFHigherThan(float value) const;
//    void replaceIFofJournalsMatching(const std::regex journal, float newIF);
  private:
    const std::string name;
    std::vector<const Book *> books;
    std::vector<const Paper *> papers;

  };

#endif // BIBLIOGRAPHY_H

2 ответа

Решение

Когда вы собираетесь определить функцию, которая является частью вашего класса. Вы должны сделать это явно.

вместо

void listOverview()

так должно быть

void Bibliography::listOverview()

Если listofOverview это бесплатная функция, нет books объявлен внутри или передан по аргументу (и НЕТ, вы не хотите использовать глобальные переменные).

Если вы считаете это членом класса, вы должны написать void Bibliography::listOfOverview() но член класса не свободная функция.

Другие вопросы по тегам