Neudefinition der Klasse Funktion Fehler C++
Habe ich meine base-Klasse Tor, während die abgeleitete Klasse ist UND (XOR usw.). Die virtuelle Funktion habe ich in meine Basis-Klasse ist für die Bestimmung einer Leistung, aber wenn ich den Prototyp in die UND.h und versuchen Sie, und implementieren Sie es mit AND.cpp ich bekomme die Neudefinition Fehler auf kompilieren. Ich bin mir sicher ich habe alles richtig.
Tor header
#ifndef GATE_H
#define GATE_H
class Gate{
public:
//various functions etc.
virtual bool output(); //**PROBLEM FUNCTION**
};
#endif
Gate-source -
#include "Gate.h"
//*various function declarations but not virtual declaration*
Abgeleitete Klasse "UND"
#ifndef AND_H_INCLUDED
#define AND_H_INCLUDED
class AND: public Gate{
public:
bool output(bool A, bool B){}
};
#endif //AND_H_INCLUDED
haben und wo meine IDE bringt meine Fehler auftreten, die in der UND.h-Datei
#include "AND.h"
bool AND::output(bool A, bool B){
if (A && B == true){
Out = true;
} else {
Out = false;
}
return Out;
}
In diesem Fall ist eine vererbte variable.
- Ihre
AND
header werden sollten, einschließlich der einen, die es braucht, um zu kompilieren. - Soweit ich bin besorgt, Sie können nicht erklären, eine Funktion ohne Argumente und definieren Sie Sie neu, mit Argumenten.
- In diesem Fall wird er beschattet werden.
- Um ehrlich zu sein, ich würde machen, dass
output
Funktion nurreturn Out = A && B;
. - stimmt, danke für den Hinweis. Aber es scheint nicht das zu sein, was der OP will ja sowieso.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist mit zwei Definitionen von
AND::output
. Eine in der Kopfzeile ist leer und eine weitere in der Umsetzung-Datei, die nicht leer ist. Sie sieht aus wie die Kopfzeile sollte haben:Beachten Sie, dass Sie nicht in der Lage sein, diese zu verwenden
output
Funktionen polymorph, weil Sie nicht die gleichen Argumente wie die Erklärung inGate
.AND.h
muss#include "Gate.h"
.Gate
, es ist nur ein zufällig gewählter text so weit wie der compiler weiß an dieser Stelle.Definieren Sie die Methode
AND::output
imAND
Klasse definition hier:ist und Sie zu re-definieren Sie hier:
Können Sie dieses Problem beheben, indem ändern der ehemaligen, um eine Erklärung:
Wie schon gesagt, Sie definiert die Funktion Ausgabe zweimal: in der Kopfzeile und in der cpp-Modul. Auch diese Funktion ist nicht virtuell, weil Ihre Anzahl und die Typen der Parameter nicht coinside mit der Erklärung der virtuellen Funktion mit dem gleichen Namen in der Basisklasse.
Möchte ich anfügen, dass die Funktion definiert werden kann, viel einfacher