将 set 方法与指针/类一起使用
Using a set method with pointers/classes
我正在尝试构造一个对象,然后将其中一个变量设置为一个值。
类头:
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;
}
相关文章:
- 在将 new 与指针一起使用时,创建数组的指定长度
- 尝试将指针与结构一起使用时出错
- 为什么我们将 [ ] 与指向数组的指针一起使用?
- 如何将数组与指针一起使用?
- 将函数指针和对象放在一起
- 如何将 string.erase() 与指针一起使用?
- 将智能指针与容器一起使用的原因
- 为什么指针和c++中的函数放在一起
- 为什么当我尝试将priority_queue与参数一起使用作为指向结构的指针时会弹出错误
- __unaligned说明符何时与指针一起使用?
- 如何定义与将 Lambda 与捕获作为回调一起使用兼容的函数指针
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- 为什么在将多态行为与指向接口的指针一起使用时没有调用析构函数?
- 自动关键字与智能指针一起
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用
- shared_ptr ::重置仅与原始指针一起使用
- 将 boost::function 与指向派生类的共享指针的参数一起使用
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- 为什么动态演员只能与参考和指针一起使用
- 是否可以将SDL2与智能指针一起使用