1

我有一个类和两种方法:

public:
bool Search ( const string & oName, const string & oAddr,
                    string & cName, string & cAddr ) const
    {
        Company ctmp;
        ctmp.own = oName + "|" + oAddr;
        int place = searchDupl(ctmp,currentsize,0);

        if (place < 0)
            return false;
        else
        {
            size_t pos = c[place].cmpn.find(' ');
            cName = c[place].cmpn.substr(0,pos);
            cAddr = c[place].cmpn.substr(pos+1);
            return true;
        }
    }

私下里,我有 searchDupl:

int searchDupl(Company cmp,int imax,int imin)
    {
        if (imax < imin)
            return -1;
        else
        {
            int mid = imin + ((imax - imin)/2);

            if (c[mid].own > cmp.own)
            {
                return searchDupl(cmp,mid-1,imin);   
            }
            else if (c[mid].own < cmp.own)
            {
                return searchDupl(cmp,imax,mid+1);
            }
            else 
            {
                return mid;
            }
        }
    }

c 是一个动态数组,在私有部分中定义并在构造函数中初始化。currentsize 是 int 类型的变量(也是私有的并在构造函数中初始化),它定义了 c 中元素的数量。

当我尝试使用 g++ 编译它时,出现以下错误:

main.cpp: In member function ‘bool CCompanyIndex::Search(const string&, const string&, std::string&, std::string&) const’:
main.cpp:69:54: error: no matching function for call to ‘CCompanyIndex::searchDupl(Company&, const int&, int) const’
main.cpp:69:54: note: candidate is:
main.cpp:106:13: note: int CCompanyIndex::searchDupl(Company, int, int) <near match>
main.cpp:106:13: note:   no known conversion for implicit ‘this’ parameter from ‘const CCompanyIndex* const’ to ‘CCompanyIndex*’

我不知道出了什么问题。

4

1 回答 1

7

您的第一个方法被声明为const-method

bool Search ( const string & oName,
              const string & oAddr,
              string & cName,
              string & cAddr ) const
//                             ^^^^^ here
{
  // ...
}

这意味着 的类型thisconst CCompanyIndex* const。当您尝试从该方法中调用第二个方法时,该调用等效于this->searchDupl(ctmp,currentsize,0). 这就是为什么类型this在您的情况下很重要。你需要一个可变的实例CCompanyIndex,即你需要this是类型CCompanyIndex* const,因为第二种方法被声明为

int searchDupl(Company cmp,int imax,int imin)
//                                           ^^^ no const here
{
  // ...
}

因此您的代码无法编译。要修复它,您应该声明第二个方法const以及该方法显然不会改变类的状态:

int searchDupl(Company cmp,int imax,int imin) const
{
  // ...
}
于 2013-03-16T11:15:20.283 回答