将 set 方法与指针/类一起使用

Using a set method with pointers/classes

本文关键字:一起 指针 set 方法      更新时间:2023-10-16

我正在尝试构造一个对象,然后将其中一个变量设置为一个值。

类头:

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()

作为一般规则,"setters"往往不返回任何内容,因此应写如下:

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;
}

setSelection 方法被定义为返回一个字符串,但它不返回任何内容。 也许添加一个 return 语句(或将其更改为 void)可以修复它:

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