【问题标题】:Building an STL application in Borland C++ Builder 5.0在 Borland C++ Builder 5.0 中构建 STL 应用程序
【发布时间】:2011-05-28 04:54:51
【问题描述】:

我是 Borland C++ builder 5.0 的新手。我使用了小型 STL 应用程序,该应用程序在一台机器(Window 2003 Server SP2)上成功编译,但在另一台机器(Windows XP 机器 SP3)上编译成功。我已经放了一个代码 sn-p 和错误信息

Error E2285 Could not find a match for 'distance<>(const AnsiString *,const AnsiString *,i
nt)

我打开了 Borland C++ Form 并在 Form Create 中添加了以下代码

#include <vcl.h>
#pragma hdrstop
#include <vector>

using namespace std;
using std::distance;

static const AnsiString Text_FieldsInTypen[]=
{
  "code_segment_national_2"
};

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   vector<AnsiString> aVec;
   aVec.push_back("Test");

   const AnsiString*  Iter;
   int Index = 0;
   distance(Text_FieldsInTypen, Iter, Index);

}
//---------------------------------------------------------------------------

【问题讨论】:

  • 您好。下次请格式化您的代码:) Ctrl-K.

标签: stl c++builder c++builder-5


【解决方案1】:

距离算法需要两个迭代器:

template<class InputIterator>
   typename iterator_traits<InputIterator>::difference_type
      distance(
         InputIterator _First, 
         InputIterator _Last
            );

不是三个不相关的论点。

Iter 在您的代码中也未初始化。

【讨论】:

  • 我已签入位于“C:\Progtam Files\Borland\CBuilder 5\include\rw\iterator.h”位置的“iterator.h”文件,该文件具有如下模板所示的三个参数 inline void distance (ForwardIterator first, ForwardIterator last, Distance& n) { ..... } .
  • 谢谢Alex,下次我会对齐代码。我在这个错误信息中挣扎了很长时间。相同的代码在 Windows Server 2003 中运行良好。请做必要的事情。
  • 我已将 AnsiString 更改为 char* 然后它使用三个参数为 distance() 编译。请让我知道为什么它无法识别 AnsiString 的距离()
  • 因为输入迭代器必须是相同的类型,但是您将 char[] 作为第一个迭代器传递。就此而言,您的代码无论如何都不会工作,即使它可以编译,因为这两个迭代器需要属于同一个容器。你想通过传递一个 char[] 作为第一个迭代器和一个(未初始化的)向量迭代器作为第二个迭代器来完成什么?
猜你喜欢
  • 2012-12-08
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
相关资源
最近更新 更多