2016-07-07 2 views
1

В моем проекте у меня есть класс для работы со временем, он объявлен как это:не удается преобразовать из «_int64» до «данных *»

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); 
}; 

диам = день, тез = месяц, ано = год, hora = час .... (португальский)

И в определенный момент мне нужно рассчитать разницу между двумя разными временами. Таким образом, я сделал этот простой оператор -:

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; 
} 

Теперь, я просто тестирование, чтобы увидеть, если он рассчитывает нужное время, я написал этот мир кода:

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

Пс. функция «ImprimeData()» предназначена для печати результата. Но на третьей строке это дает мне ошибку. Во-первых, это говорит о том, что значение tipo 'long long' не может использоваться для инициализации типа данных 'Data *', а затем оно говорит, что не может конвертировать из _int64 в Data *.

+1

Почему вы ожидаете, что преобразование типа данных должно быть в порядке? –

+0

В строке 'Data * resultado = teste - aux;' имеется несколько проблем. Оператор вычитания не ожидает, что любой операнд будет указателем и не вернет указатель. – tsandy

+0

Стоп. Если 'aux' и' teste' являются указателями, почему этот код не компилируется? Это правильный синтаксис (не семантика). Что такое 'aux'? – ilotXXI

ответ

5

Эта линия

Data * resultado = teste - aux; 

должен быть

Data resultado = *teste - *aux; 

Первый вычитает два значения указателя. Второй вызывает вашу перегрузку operator -.

Вы должны также изменить

resultado->ImprimeData(); 

в

resultado.ImprimeData(); 
+0

Если я это сделаю, появляется сообщение об ошибке в первом указателе в «* teste», в котором говорится, что он не может преобразовать из «данных» в «данные» –

+1

@ CésarPereira, поскольку вам также необходимо удалить '*' из ' Данные * resultado' – GreatAndPowerfulOz

+0

Это сделало эту работу. Но затем я получаю сообщение об ошибке, чтобы напечатать время результата. В строке «resultado-> ImprimeData()» я получаю «выражение должно иметь тип указателя». Это относится к «результату» –

-1

Ваш Teste является указателем, как ваш Окс.

Это немного, так как мои яички считаются более контейнером и/или фабрикой.

+2

Мягкий ответ. – user4581301

Смежные вопросы