我试图构造一个对象,然后将变量之一设置为一个值。

类头:

class Book {
public:
Book();
Book(string newSelection);
string getSelection();
string setSelection(string newSelection);

private:
string selection;
}

类cpp
Book::Book() {}

Book::Book(string newSelection) {
selection = newSelection;
}


string Book::getSelection(){
return selection;
}

string Book::setSelection(string newSelection){
selection = newSelection;
}

驱动程序
Book* book1 = new Book();
book1->setSelection("The Book Title");
cout << "Book selected:    " << book1->getSelection() << endl;

我遇到了细分错误,并且不确定原因。有人可以指出我的问题可能在哪里吗?

最佳答案

您的setSelection()函数被声明为返回字符串,但实际上未返回任何字符串。您至少应该为此收到编译警告。

通过在调试器中运行此程序,我相信正在发生的事情是在调用setSelection()之后,在返回的字符串上调用了析构函数。由于此字符串实际上不存在,因此会在运行时中导致abort()

通常,“设置者”倾向于不返回任何东西,因此将编写如下:

void setSelection(const string& newSelection);

...
void Book::setSelection(const string& newSelection)
{
    selection = newSelection;
}

还应注意,该字符串是通过const引用而不是通过值传递的,这更有效。但是,这不会成为您的问题的原因。

另一个建议是确保您的“getter”被声明为const,因为它不会更改对象中的任何内容:
string getSelection() const;

...
string Book::getSelection() const
{
    return selection;
}

10-08 04:37