将标准输入中的字符串分配给类成员变量
Posted
技术标签:
【中文标题】将标准输入中的字符串分配给类成员变量【英文标题】:Assigning a string from standard input to a class member variable 【发布时间】:2014-04-19 00:35:57 【问题描述】:我一直被困在这个问题上,在互联网上搜索找不到解决办法。这段代码应该提示用户输入 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 类的私有成员。从标准输入分配那些我得到内存访问冲突!我不明白我哪里出错了。 有什么帮助吗?
这就是从另一个名为 BookStore 的类中调用此函数的方式:
void BookStore::addBook(int No)
book[No].setBookProperty();
【问题讨论】:
这可能与这个函数的调用方式有关。能否也显示调用代码? 这有点奇怪!对于第一个赋值,一切正常,这意味着 name 被赋值给类 Book 的成员变量 NAME。当它进入第二个任务时!错误弹出。 我把调用函数贴在了qustion里面!BookStore::book
的定义是什么,它是如何分配的?如果book[No]
不是有效的Book
对象,那么在其上调用setBookProperty()
将解决您遇到的内存错误。请提供SSCCE 证明您正在尝试做的事情。
在下面发布了定义作为答案。
【参考方案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
【讨论】:
谢谢,我尝试了快速修复来限制允许的书籍数量!这次另一个错误称为断言失败!有什么想法吗? 不,我需要更多信息——它完成了多远,错误说了什么等等。通过调试器运行它并逐行遍历,这将有助于缩小范围。 【参考方案2】:这就是 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);
【讨论】:
以上是关于将标准输入中的字符串分配给类成员变量的主要内容,如果未能解决你的问题,请参考以下文章