C ++程序编译器错误:无匹配功能

时间:2013-09-23 00:25:45

标签: c++ compiler-errors

我正在使用链接列表来实现一致性程序。尝试使用g ++编译程序时,我收到以下编译器错误:

concordancetest.cpp:在函数'void build_list(std :: ifstream&,char *)'中: concordancetest.cpp:65:错误:没有匹配函数调用'Concordance :: insert(char *&,int&)'
concordance.h:22:注意:候选者是:void Concordance :: insert(char(&)[9],int&)

以下是我写的代码:

标题文件:

#ifndef CONCORDANCE_H
#define CONCORDANCE_H

#include <iostream>
#include <cstdlib>

const int MAX = 8;

class Concordance
{
    public:
        //typedef
        typedef char Word[MAX+1];

        //constructor
        Concordance();

        //destructor
        ~Concordance();

        //modification member functions
        void insert(Word& word, int& n);
        void remove(Word& word);
        int get_count(Word& word);

        //constant member functions
        int length() const;

        //friend member functions
        friend std::ostream& operator << (std::ostream& out_s, Concordance& c); 

    private:
        struct Node
        {
            Word wd;
            int count;
            Node *next;
        };
        Node *first;    

       Node* get_node(Word& word, int& count, Node* link);   
};

#endif

实施守则:

//class definition
#include "concordance.h"
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;

Concordance::Concordance()
{
    first = NULL;
}

Concordance::~Concordance()
{
    Node *temp;
    while(first != NULL)
    {
        temp = first;
        first = first -> next;
        delete temp;
    }
}

void Concordance::insert(Word& word, int& n)
{
    Node *prev;

    if(first == NULL || strcmp(first -> wd, word) > 0)
        first = get_node(word, n, first);
    else
    {
        prev = first;

        while(prev -> next != NULL && strcmp(prev -> next -> wd, word) > 0)
            prev = prev -> next;
        prev -> next = get_node(word, n, prev -> next);
    }
}

void Concordance::remove(Word& word)
{
    Node *prev, *temp;
    prev = temp;
    if(prev -> wd == word)
    {
        first = first -> next;
        delete prev;
    }
    else
    {
        while(strcmp(prev -> next -> wd, word) > 0)
            prev = prev -> next;
        temp = prev -> next;
        prev -> next = temp -> next;
        delete temp;
    }
 }

int Concordance::get_count(Word& word)
{
    while(strcmp(first -> wd, word) != 0)
        first = first -> next;

    return first -> count;
}

int Concordance::length() const
{
    Node *cursor;
    int len;

    len = 0;
    for(cursor = first; cursor != NULL; cursor = cursor -> next )
      len++;
    return len;
}

Concordance::Node* Concordance::get_node (Word& word, int& count, Node* link)
{
    Node *temp;

    temp = new Node;
    strcpy(temp-> wd, word);
    temp-> next = link;
    temp -> count = count+1;
    return temp;
}

ostream& operator << (ostream& out_s, Concordance& c)
{
    Concordance::Node *cursor;

    out_s << "Word" << setw(10) << " " << "Count" << endl;
    out_s << "--------------------" << endl;

    for(cursor = c.first; cursor != NULL && cursor->next != NULL; cursor = cursor-> next )
      out_s << cursor-> wd << setw(10) << " " << cursor -> count << endl;

    if(cursor != NULL)
      out_s << cursor-> wd << setw(10) << " " << cursor -> count << endl;
    out_s << "--------------------" << endl;

    return out_s;
}

测试程序:

#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include "concordance.h"
using namespace std;

void read_word(ifstream& in_file, char array[]);
void build_list(ifstream& in_file, char array[]);

int main()
{
    char file_name[100];
    ifstream in_file;
    char array[MAX+1];

    cout << "Enter a file name: ";
    cin >> file_name;

    in_file.open(file_name);

    build_list(in_file, array);

    in_file.close();

    return EXIT_SUCCESS;
}   

void read_word(ifstream& in_file, char array[])
{
    char ch;
    int i = 0;

    in_file.get(ch);

    while(isalpha(ch) && !isspace(ch))
    { 
        if(i > MAX-1)
        {
            while(!isspace(ch))
            in_file.get(ch);
            break;
        }

        ch = tolower(ch);
        array[i] = ch;
        i++;
        in_file.get(ch);
    }

    for(int j = 0; j < i; j++)
        cout << array[j];
    cout << endl;

}

void build_list(ifstream& in_file, char array[])
{
    Concordance c;
    int count = 0;

    while(!in_file.eof())
    {
        read_word(in_file, array);
        c.insert(array, count);
    }

    cout << c;
}

1 个答案:

答案 0 :(得分:1)

char array[]的类型为char *,因此当找到匹配的函数时,找不到任何匹配函数。您可以使用typedef char* Word;并在需要它的函数内强制执行最大长度来解决此问题。