2

我在代码中大量使用 std::shared_ptr。我有一些我想使用“this”从 MyClass 调用的函数,因此将这些函数声明为(例如)

int AnotherClass::foo(const MyClass *obj)
{
} 

我希望 const 明确 obj 不会改变,因为我传递了一个原始指针。但是在 foo 里面我有

int AnotherClass::foo(const MyClass *obj)
{
    int number = obj->num_points()-1;
}

我的编译器抱怨“对象具有与成员函数不兼容的类型限定符”。num_points 是一个在头文件中声明和定义的简单 get 函数:

class MyClass {
public:
  ...
  int num_points(){return _points.size();}
  ...
private:
  std::vector<MyPoint> _points;
};

解决这个问题的最佳方法是什么?显然我可以摆脱 foo 中的 const 要求,但我喜欢它强加的刚性。提前谢谢了!

4

2 回答 2

10

使该成员函数const

int num_points() const // <---
{
    return _points.size();
}

这样你就可以在const对象上调用它。养成这样的习惯来限定每个不改变对象状态的函数。

于 2013-07-18T09:16:23.010 回答
6

也声明num_points为 const:

int num_points() const
{
    return _points.size();
}
于 2013-07-18T09:16:13.130 回答