没有匹配函数调用类成员

时间:2011-01-03 02:59:11

标签: c++

我已经实现了一个通用列表,我正在尝试从列表中的某个位置检索数据。嗯......但我收到一个错误:没有匹配函数来调用'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我只是学习基础知识,而且对于大规模可重用模块,代码可能并不完美。在这个阶段,它只需要工作。

由于

2 个答案:

答案 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,则此问题应该消失。

希望这有帮助!