2016-05-10 7 views
0

Ich versuche, ein Programm zu schreiben, wo ich zwei Mitarbeiter Bruttolohn mit einem überladenen Größer als Operator vergleichen kann. Um Bruttolohn zu erhalten, habe ich eine Mitgliedsfunktion, die das Bruttogehalt zurückgibt. Aus irgendeinem Grund, wenn ich die beiden Brutto vergleichen gehen bezahlt erhalte ich:überladen '>' als eine nicht Mitglied Funktion

Fehler 1 Fehler C2662: ‚double employeeclass::Employee::grosspay(void)‘: kann ‚this‘ Zeiger von ‚const employeeclass::Employee‘ auf ‚employeeclass::Employee &‘ nicht konvertieren

und

2 IntelliSense: das Objekt geben Qualifier, die nicht kompatibel sind mit dem Elementfunktion-Objekttyp ist:

const employeeclass::Employee

Ich habe die Segmente des Codes, die mir die Probleme geben.

Die CPP:

#include <fstream> 
#include <iomanip> 
#include <string> 

using namespace std; 
#include "Employee.h" 
namespace employeeclass { 
    bool operator> (const Employee &e1, const Employee &e2) { 
     if (e1.grosspay() > e2.grosspay()) 
      return true; 
     else 
      return false; 
    } 
} 

Die H-Datei

namespace employeeclass { 
    class Employee { 
     friend bool operator> (const Employee &e1, const Employee &e2); 
    } 
} 
+5

klingt wie die 'grouppay()' Funktion ist nicht markiert 'const' –

+2

BTW' if (X) zurück wahr; else return false; 'kann besser ausgedrückt werden als' return X; ' –

+0

Bitte bearbeiten Sie Ihre Frage, um ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) aufzunehmen, was am wichtigsten ist, das wir brauchen um die Erklärung von "Mitarbeiter :: grouppay" zu sehen. –

Antwort

1

const In den Header und CPP-Dateien für grosspay()

double employeeclass::Employee::grosspay(void) const; 

Die const Bezeichner sorgt für die Instanz Verwenden Sie die Funktion in einer Konst-Deklaration. Im Wesentlichen bedeutet const, dass diese Funktion keine Änderungen vornimmt und schreibgeschützt ist.