使用带指针/类的set方法

时间:2012-08-08 16:26:01

标签: c++

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

班级标题:

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;

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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