c++ - 使用带有指针/类的 set 方法

标签 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;

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

最佳答案

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

关于c++ - 使用带有指针/类的 set 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868933/

相关文章:

c++ - 未调用构造函数和 "pointer being freed was not allocated"错误

c++ - spirit X3 : Can't compile any example on Ubuntu 16. 04

C++ 设置 "blank"或重置 ifstrean (ios) 的异常掩码

c++ - 字符数组中的十六进制在写入套接字时导致随机字符

c++ - Mongoose C++ Http 服务器只获取 MG_OPEN_FILE 事件

c++ - 基于 OpenCV 标识识别的 ICPR 2010 文章

c++ - 使用未命名的命名空间重新定义 API 中的友元类并访问私有(private)成员?

c++ - 通过类的模板参数特化成员模板结构

c++ - cppreference.com 上的 IO 错误表 (C++)

c++ - 我什么时候应该从 QObject 派生一个类?