我有一个名为book的类,其中包含书。
#ifndef BOOK_H
#include<string>
#include<vector>
#include<iostream>
#define BOOK_H
class book
{
public:
std::string Author, Title;
int Year;
book(){}
book(std::string author, std::string title, int year);
~book(){}
void add_book();
std::vector<book*>library;
};
#endif
book.cpp文件
#include "book.h"
book::book(std::string author, std::string title, int year)
:Author(author), Title(title), Year(year){}
void book::add_book()
{
int y;
std::string a, t;
std::cin>>a;
std::cin>>t;
std::cin>>y;
library.push_back(new book(a, t, y));
}
但是,当我想向book
库中添加push_back
新对象时,在main.cpp文件中新对象的处理过程中出现了段错误
#include "book.h"
int main()
{
book* ptr;
ptr->add_book();
return 0;
}
有人可以向我解释一下问题是什么吗?
我是OOP的新手,尽管我在这里阅读了很多文章,但仍然找不到解决方案。
您不初始化ptr
in main
;
int main()
{
book* ptr = new book(); // initialize it here
ptr->add_book();
return 0;
}
这将修复段错误,但是,我不确定与示例代码关联的逻辑以及可能的内存泄漏。
我希望将类型library
与book
类型分开,以更好地组合并避免堆分配;
#include<string>
#include<vector>
#include<iostream>
class book
{
public:
std::string Author, Title;
int Year;
book(){}
book(std::string author, std::string title, int year) : Author(author), Title(title), Year(year) {}
~book(){}
};
struct library {
std::vector<book> books_;
void add_book(const book& value) { books_.push_back(value); }
};
int main()
{
library lib;
int y;
std::string a, t;
std::cin>>a;
std::cin>>t;
std::cin>>y;
lib.add_book(book(a, t, y));
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句