我想在类中传递一个指向函数的指针,但它显示出一个错误,坦率地说,我不知道为什么。我一直在密切关注教程,它的写作就像那样,但是他们不是&#我在做的时候有问题。谁能提供一些提示?我是一个相对较新的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;不能超载。
答案 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
类中声明两对具有相同签名的方法,这是无效的。