0
    bool check_integrity( int pos ) const
    {
        if (( pos <= 0 ) || ( pos > max_seq ) || ( pos  >= _length + _beg_pos ))
        {
             cerr << "!! invalid position: " << pos
                  << " Cannot honor request\n";
             return false;
        }

        if ( _isa == ns_unset ) 
        {
             cerr << "!! object is not set to a sequence."
                  << " Please set_sequence() and try again!\n";
             return false;
        }

        if ( pos > _elem->size()){
             cout << "check_integrity: calculating "
                  << pos - _elem->size() << " additional elements\n";
             ( this->*_pmf )( pos );
        }

        return true;
    }


    public:
        typedef void (num_sequence::*PtrType)( int );
    private:
        PtrType    _pmf;

上記のコード クリップは、クラス「num_sequence」の一部です。次の行でエラーが発生しました。

( this->*_pmf )( pos );

エラー: 'const num_sequence *const this' エラー: オブジェクトには、メンバー関数と互換性のない型修飾子があります

ありがとう!

4

3 に答える 3

4

check_integrityconst関数であるため、それが呼び出す関数も である必要があります。constしたがって、PtrType関数を呼び出すには も である必要がありますconst

これを試して:

typedef void (num_sequence::*PtrType)( int ) const;

NB: 私はこれをコンパイルしませんでした :) 大声で考えているだけです。

于 2012-08-10T05:19:19.867 に答える
3

_pmf定数 object に対して が指す非 const メンバー関数を呼び出そうとしています*this。これは const-correctness ルールに違反しています。

PtrTypeあなたを次のように宣言するか

typedef void (num_sequence::*PtrType)( int ) const;

または関数から削除constしますcheck_integrity

bool check_integrity( int pos )
{
   ...

これまたはあれのどちらか。この場合、他の人がどちらを行うのが正しいかを判断するのに十分な情報を提供していません。

于 2012-08-10T05:43:34.157 に答える
1

変更する必要があります

typedef void (num_sequence::*PtrType)( int );

typedef void (num_sequence::*PtrType)( int ) const;

関数から関数を呼び出しているconstため

于 2012-08-10T05:21:53.170 に答える