我有一个班级和两个方法:
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*’
我不知道出了什么问题。
答案 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
的可变实例,即您需要this
为CCompanyIndex* const
类型,因为第二种方法被声明为
int searchDupl(Company cmp,int imax,int imin)
// ^^^ no const here
{
// ...
}
因此您的代码无法编译。要修复它,你应该将第二个方法声明为const
,并且该方法显然没有改变类的状态:
int searchDupl(Company cmp,int imax,int imin) const
{
// ...
}