我一直陷入困境,无法找到解决方案。这段代码应该提示用户输入3个不同的字符串并将它们分配给类的成员变量。
void Book::setBookProperty()
{
string name;
string publisher;
string category;
int published_year;
double price;
// Prompt for book infromation
cout << "Name of the Book: ";
getline(cin, name, '\n');
this->name = name;
cout << "Publisher: ";
getline(cin, publisher, '\n');
this->publisher = publisher;
cout << "Category: ";
getline(cin, category, '\n');
this->category = category;
cout << "Published year: ";
cin >> published_year;
this->published_year = published_year;
cout << "Price:";
cin >> price;
this->price = price;
}
name,publisher,category,published_year和price都是Book Book的私有成员。从标准输入分配那些我得到内存访问违规!我不知道哪里出错了。 有什么帮助吗?
这就是从另一个名为BookStore的类调用此函数的方法:
void BookStore::addBook(int No)
{
book[No].setBookProperty();
}
答案 0 :(得分:1)
BookStore中的book
数组的长度为零。所以你不能适应那里的任何书籍。当你致电addBook(1)
时,它会尝试访问超出数组末尾的book[1]
,因此它正在写入它不拥有的内存。
快速解决方法是设置书籍数量的上限:
book = new Book[10]; // book store with only 10 books allowed.
更好的解决方法是将图书存储在std::vector
等集合中。然后,您可以检查矢量是否有足够的空间放置您想要添加的书籍,并在需要时添加额外的空间。
vector<Book> book;
void BookStore::addBook(int No)
{
if (book.size() <= No)
book.resize(No+1);
book[No].setBookProperty();
}
请注意,向量和数组都是基于零的,这就是您需要调整为No+1
的原因
答案 1 :(得分:0)
这就是如何定义BookStore并在其中实例化Book的对象。
class BookStore
{
public:
BookStore(string name)
{
storeName = name;
book = new Book[];
}
Book getBook(int);
void addBook(int); // prompts for information
private:
string storeName;
Book *book;
};
这就是从主函数调用整体的方式:
int main()
{
BookStore Amazon("amazon");
Amazon.addBook(1);
}