我已经实现了一个通用列表,我正在尝试从列表中的某个位置检索数据。嗯......但我收到一个错误:没有匹配函数来调用'List :: retrieve(int&,Record&)' 下面是main.cpp的代码和从List.h中检索的函数片段。#include
Main.cpp的
#include <iostream>
#include "List.h"
#include "Key.h"
using namespace std;
typedef Key Record;
int main()
{
int n;
int p=3;
List<int> the_list;
Record data;
cout<<"Enter the number of records to be stored. "<<endl;
cin>>n;
for(int i=0;i<n;i=i++)
{
the_list.insert(i,i);
}
cout<<the_list.size();
the_list.retrieve(p, data);
cout<<"Record value: "<<data;
return 0;
}
List.h
Error_code retrieve(int position, List_entry &x)const
{
if(empty()) return underflow;
if(position<0 || position>count) return range_error;
x=entry[position];
return success;
}
完整代码:
Main.cpp:http://pastebin.com/UrBPzPvi
List.h:http://pastebin.com/7tcbSuQu
P.S我只是学习基础知识,而且对于大规模可重用模块,代码可能并不完美。在这个阶段,它只需要工作。
由于
答案 0 :(得分:7)
data
,您尝试将其作为retrieve
的第二个参数传递,其类型为Record
。
retrieve
的第二个参数属于List_entry
,而不是Record
。
当编译器说“没有匹配的函数”时,通常意味着它找到了一个带有你所用名称的函数,但是你试图传递给该函数的一个或多个参数类型错误,或者你是试图将错误数量的参数传递给函数。
答案 1 :(得分:2)
错误“调用[...]没有匹配函数”通常意味着“我找不到可以使用以下参数调用的函数”。这可能意味着许多事情 - 要么你拼错了函数名,要么参数是错误的类型,或者你试图在const对象上调用非const成员函数等等。通常,错误会给你一些有关确切错误的详细信息,包括它尝试匹配的函数,以及在调用站点实际找到的参数类型。模板可以使这更难阅读,但有一点时间你通常可以学习阅读它们。
关于这段代码,retrieve函数的第二个参数是List_entry类型,它是List的模板参数。在main函数中,实例化List,因此在这种情况下List_entry是一个int。但是,您正在尝试查找记录,(我假设)不是int。如果您更改代码以尝试查找int,或者将List列为List,则此问题应该消失。
希望这有帮助!