将指针传递给函数c ++

时间:2016-05-20 01:04:45

标签: c++

我想在类中传递一个指向函数的指针,但它显示出一个错误,坦率地说,我不知道为什么。我一直在密切关注教程,它的写作就像那样,但是他们不是&#我在做的时候有问题。谁能提供一些提示?我是一个相对较新的c ++。提前谢谢。

如果这有帮助,这里我正在制作一种字典原型,在这里我试图从输入文件对读取并将它们保存在链表中,因为我需要使用它。我正在使用Code :: Blocks程序。

#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
//-------------------------------
struct node
{
    string Language;
    string English;
    node* next;
};
//-------------------------------
class Dictionary  //class where all functions will go
{
public:
    void readFirstElement(node *head, node *tail);
    void readElements(node* head, node* tail);
   // void insertElements();
  //  void deleteElements(node* &head, node* &tail);
//-------------------------------
    void readFirstElement(node *head, node *tail)
    {
        string word1, word2;
        node* temp;
        ifstream input;
        input.open("input.txt");
        input >> word1 >> word2;
        temp=new node;
        temp->Language=word1;
        temp->English=word2;
        temp->next=NULL;
        cout << temp->Language <<"  ir "<< temp->English << endl;
        head=temp;
        tail=temp;

        input.close();
    }
//-------------------------------
    void readElements(node* &head, node* &tail)
    {
        string word1, word2;
        node* temp;
        ifstream input;
        input.open("input.txt");
        while (!input.eof( ))
        {
            input >> word1 >> word2;
            temp=new node;
            temp->Language = word1;
            temp->English=word2;
            tail->next=temp;
            tail=temp;
        }
        tail->next=NULL;
        input.close();
    }
int main()
{
    node* head = NULL;
    node* tail = NULL;
    Dictionary ob;
    ob.readFirstElement(&head, &tail);
    ob.readElements(&head, &tail);
    node* temp = head;
    return 0;
}

它写的主要错误是错误:&#39; void Dictionary :: readFirstElement(node *,node *)&#39;不能超载。

2 个答案:

答案 0 :(得分:1)

这与传递指针无关。无论参数如何,你都会遇到这个问题,即使根本没有参数。

定义成员函数有两种方法。你可以内联完成,完全在类体中:

class X {
    void foo() {
        do_something();
    }
};

或者您可以将声明放在类主体中,然后将定义放在外面。

class X {
    void foo();
};

void X::foo() {
    do_something();
}

您所做的是在类体中声明您的函数,然后在类体中单独定义它们。编译器将此视为两个不同的函数。但由于它们具有相同的名称和参数类型,因此任何调用它们的尝试都是模糊的,因此不允许这样做。选择我上面显示的选项之一。

答案 1 :(得分:0)

将方法定义放在.cpp实施文件中:

  

Dictionary.h

#ifndef DICTIONARY_H
#define DICTIONARY_H

class Dictionary {
    public:
        void readFirstElement(node* head, node* tail) const;
        void readElements(node* head, node* tail) const;
        //...
};

#endif
  

Dictionary.cpp

#include "Dictionary.h"

void Dictionary::readFirstElement(node* head, node* tail) const {
    //...
}

void Dictionary::readElements(node* head, node* tail) const {
    //...
}

目前你在Dictionary类中声明两对具有相同签名的方法,这是无效的。