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_integrity是一个const函数,所以它调用的函数也必须是const,因此调用一个PtrType函数也必须是const

试试这个:

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

注意:我没有编译这个 :) 只是大声思考。

于 2012-08-10T05:19:19.867 回答
3

您正在尝试_pmf为常量 object调用指向的非常量成员函数*this。这违反了 const 正确性规则。

要么声明你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 回答