名称、论文、书籍未在此范围内声明 non-member 函数 C++
Name, Papers , Books was not declared in this scope non-member function C++
我在声明 non-member 函数 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;
}
}
编译器说名称文件和书籍未在此范围内声明。我已经尝试了几种方法,比如使函数成为朋友,但主要是它说 class Biblioagraphy 没有名为 listOverview();
的成员
这是我的header:
#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
当您要定义属于 class 的函数时。你需要明确地做到这一点。
而不是
void listOverview()
应该是
void Bibliography::listOverview()
如果 listofOverview
是自由函数,则没有 books
在内部声明或通过参数传递(不,您不想使用全局变量)。
如果你认为它是一个 class 成员,你应该写 void Bibliography::listOfOverview()
但它是一个 class 成员而不是一个自由函数。
我在声明 non-member 函数 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;
}
}
编译器说名称文件和书籍未在此范围内声明。我已经尝试了几种方法,比如使函数成为朋友,但主要是它说 class Biblioagraphy 没有名为 listOverview();
的成员这是我的header:
#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
当您要定义属于 class 的函数时。你需要明确地做到这一点。
而不是
void listOverview()
应该是
void Bibliography::listOverview()
如果 listofOverview
是自由函数,则没有 books
在内部声明或通过参数传递(不,您不想使用全局变量)。
如果你认为它是一个 class 成员,你应该写 void Bibliography::listOfOverview()
但它是一个 class 成员而不是一个自由函数。