2

コードで std::shared_ptr を自由に使用しています。「this」を使用してMyClassから呼び出したい関数がいくつかあるので、これらの関数を次のように宣言しました(たとえば)

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

生のポインターを渡しているので、obj が変更されないことを const で明確にしたいのです。しかし、私が持っている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 に答える