2016-07-07 11 views
1

In meinem Projekt habe ich eine Klasse mit der Zeit zu arbeiten, es wie folgt deklariert wird:kann nicht von ‚_int64‘ auf ‚Daten *‘ konvertieren

class Data { 
    int dia; 
    int mes; 
    int ano; 
    int hora; 
    int minuto; 

    public: 
     Data(); 
     Data(int, int, int, int, int); 
     Data(const Data &); 
     void mostraData(); 
     void ImprimeData(); 
     Data operator-(const Data &aux); 
}; 

dia = Tag, mes = Monat, ano = Jahr, hora = hour .... (portugisisch)

Und an einem bestimmten Punkt muss ich den Unterschied zwischen zwei verschiedenen Zeiten berechnen. Also habe ich diese einfache Operator gemacht -:

Data Data::operator-(const Data & aux){ 
    Data temp(0, 0, 0, 0, 0); 
    temp.dia = this->dia - aux.dia; 
    temp.mes = this->mes - aux.mes; 
    temp.ano = this->ano - aux.ano; 
    temp.hora = this->hora - aux.hora; 
    temp.minuto = this->minuto - aux.minuto; 
    return temp; 
} 

Nun, ich habe nur testen, ob es die richtige Zeit berechnet, schrieb ich diesen Frieden Code:

aux = new Data; 
Data *teste = new Data(7, 7, 2016, 22, 41); 
Data * resultado = teste - aux; 
resultado->ImprimeData(); 

Ps. Die Funktion "ImprimeData()" dient zum Ausdrucken des Ergebnisses. Aber in der dritten Zeile gibt es mir einen Fehler. Zuerst sagt es, dass ein Wert von tipo 'long long' nicht verwendet werden kann, um einen Eintrag vom Typ 'Data *' zu initialisieren, und dann sagt es, dass es nicht von _int64 in Data * konvertiert werden kann.

+1

Warum sollten Sie erwarten, dass die Datentypumwandlung in Ordnung sein sollte? –

+0

Es gibt einige Probleme in der Zeile 'Data * resultado = teste - aux;'. Der Subtraktionsoperator erwartet nicht, dass einer der Operanden ein Zeiger ist und gibt keinen Zeiger zurück. – tsandy

+0

Stop. Wenn 'aux' und' teste' Zeiger sind, warum kompiliert dieser Code nicht? Es ist eine korrekte Syntax (keine Semantik). Was ist 'Aux'? – ilotXXI

Antwort

5

Diese Linie

Data * resultado = teste - aux; 

sollte

Data resultado = *teste - *aux; 

Die erste ist Subtraktion von zwei Zeigerwerten sein. Der zweite ruft Ihre operator - Überlastung.

Sie sollten auch

ändern
resultado->ImprimeData(); 

zu

resultado.ImprimeData(); 
+0

Wenn ich das tue, erscheint ein Fehler auf dem ersten Zeiger, in "* teste", sagend, dass von 'Daten' zu 'Daten *' –

+1

@ CésarPereira nicht umwandeln kann, weil Sie auch das '*' aus dem '' entfernen müssen Daten * resultado' – GreatAndPowerfulOz

+0

Das hat den Job gemacht. Aber dann erhalte ich einen Fehler beim Versuch, die Ergebniszeit zu drucken. In der Zeile "resultado-> ImprimeData()" bekomme ich einen "Ausdruck muss einen Zeigertyp haben". Das bezieht sich auf "resultado" –

-1

Sie testet ein Zeiger ist, wie Ihr aux ist.

Das ist ein bisschen aus, da meine Hoden als ein Container und/oder Fabrik betrachtet werden würde.

+2

Eine ballige Antwort. – user4581301