1

我有一个旧的 c++ 代码,写入并编译到 c++ builder 5 中。但是现在,我需要将此代码更新/迁移到 c++ builder 2009。所以,我有一些问题:

int __fastcall TAllConversor::ListToStr(
    const TStringList* pList,
    AnsiString& strValue,
    const long lngLimiteInferior,
    const long lngLimiteSuperior) const
{
  long lngIndice;
  AnsiString strAux;

  try
  {
    if (lngLimiteSuperior == 0)
      lngIndice = pList->Count;
    else
      lngIndice = lngLimiteSuperior + lngLimiteInferior;

    for (int i = lngLimiteInferior; i < lngIndice; i++)
    {
      strAux += pList->Strings[i] + ";";
    }

    strValue = strAux;
    return 1;
  }
  catch(...)
  {
    return 0;
  }
}

在“lngIndice = pList->Count;”行 我收到此错误:“E2522 非 const 函数 _fastcall TStrings::GetCount() 为 const 对象调用”。

那么,我该如何解决(解决)它?

4

1 回答 1

3

如果您提供了 TStringList 的确切定义会有所帮助,但我假设它是类型名 TString 的模板化数组。

解决方法可能是抛弃 const,如下所示:

lngIndice = (const_cast<TStringList*>(pList))->Count;

当然,这就是它的本质 - 一种解决方法,您可能希望考虑在 TString 本身中提供一个 const-correct 访问函数

于 2012-07-12T13:55:46.723 回答