2012-08-10 43 views
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; 

The above code clip is part of class "num_sequence". I got an error for the following line:C++ const的错误

(this->*_pmf)(pos); 

The error is: 'const num_sequence *const this' Error: the object has type qualifiers that are not compatible with the member function

谢谢!

回答

3

您正在试图调用由指向非const成员函数_pmf对于恒定对象*this。这违反了const-correctness规则。

无论是宣布你PtrType作为

typedef void (num_sequence::*PtrType)(int) const; 
check_integrity功能

bool check_integrity(int pos) 
{ 
    ... 

非此即彼

或删除const。您没有提供足够的信息让其他人决定在这种情况下应该做哪些事情。

4

check_integrityconst功能,所以功能调用也必须const,因此调用PtrType功能也必须是const

试试这个:

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

注:我没编译这个:)只是想大声。

1

您需要更改

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

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

,因为你是从const函数调用函数

相关问题