"隐含的'this'参数没有已知的转换"错误

时间:2013-03-16 10:52:37

标签: c++

我有一个班级和两个方法:

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*’

我不知道出了什么问题。

1 个答案:

答案 0 :(得分:7)

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

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

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

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

因此您的代码无法编译。要修复它,你应该将第二个方法声明为const,并且该方法显然没有改变类的状态:

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