2015-01-07 2 views
0

Я работаю над некоторым программным обеспечением для моделирования, в котором у меня есть объект, который движется к определенному местоположению на 2D-карте. Пока объект движется к местоположению, я пытаюсь отобразить некоторую информацию о его движении - например, сколько времени потребуется, чтобы добраться туда (TimeToGo или TTG), его ETA и оставшееся расстояние, на которое он должен ехать (DistanceToGo или DTG).C++ ошибка компиляции: невозможно преобразовать параметр 1 из 'DateTimeAndZone' в 'const int'

У меня есть следующие функции в моем DisplayTime.cpp исходном файле:

void TimeReadout::update(const TPEquipmentTime::DateTimeAndZone& dateTimeAndZone_, const bool convertToSavedZone_) 
{ 
    ... 
} 

Эта функция используется для обновления значения отображаются на графическом интерфейсе для ETA данного лица на месте. Я знаю, что функция работает правильно, поскольку она используется в нескольких местах в программе и делает то, что ожидается в этих местах.

Я сейчас пытаюсь повторно использовать эту функцию (копировать & паста) для обновления значения ТТГ

Я сейчас пытаюсь использовать функцию в другом исходном файле: Dialogue.cpp следующим образом:

pFlightPlanTTGReadout->update(fpTTG); 

Переменная fpTTG имеет тип TPEquipmentTime::DateTimeAndZone, а состояние состояний update() принимает переменную типа const int.

Когда я пытаюсь скомпилировать, я получаю ожидаемую ошибку:

'update' : cannot convert parameter 1 from 'Time_Value' to 'const int'

Однако, когда я смотрю на функции, которую я скопировал этот бит кода from- он сделал именно то, что я пытаюсь делать с (разные) параметра, одного и того же типа, т.е.

pFlightPlanETAReadout->update(fpETA); 

где fpETA является переменной типа TPEquipmentTime::DateTimeAndZone

Что я здесь отсутствует? Почему это работает в исходной функции, но не в функции, которую я пишу, хотя я (по крайней мере, пытаюсь) сделать то же самое, просто с другой переменной?

EDIT 07/01/2015 @ 18:45 Я только что заметил разницу между вызовом update() функции, что я пытаюсь использовать в своей функции, и тот, используемый в исходной функции:

в оригинале:

pFlightPlanETAReadout->update(fpETA); 

Если я наведите курсор на update две функции отображаются в маленьком диалоговом окне:

virutal void TimeReadout::update(void) 

virtual void TimeReadout::update(const TPEquipmentTime::DateTimeAndZone & dateTimeAndZone_, const bool convertToSavedZone_ = true) 

В то время как в моей функции:

pFlightPlanTTGReadout->update(fpTTG); 

Если я наведите курсор на «обновление», в диалоговом окне отображается только одну функцию:

void ElapsedTimeReadout::update(const int total_seconds_) 
+0

[MCVE] (http://stackoverflow.com/help/mcve) будет полезен здесь. –

+0

Вы отправили определение функции члена, которое принимает 2 параметра и вызов, который предоставляет 1 аргумент функции-члена. Так что, возможно, у вас есть какое-то другое «обновление» где-то объявлено, что принимает 1 параметр (это int). –

+0

Я бы подумал, что это функция, которая используется, поскольку, если я нажму правой кнопкой мыши на функцию 'update()', которая имеет 'fpETA' в качестве параметра, который она задана, и нажмите« Перейти к определению », определение функции, которое оно принимает меня ... (кстати, я использую Visual Studio 2008 в качестве моей IDE). Я действительно задавался вопросом об этом (только используя один параметр, когда есть два в определении) сам ... Я вижу, что в том же .cpp-файле, что и определение этой функции, существует еще одно «пустое» определение: 'void update (void) {}; '- может быть, это тот, который используется и перевыполнен? – someone2088

ответ

1

Если меня не хватает чего-то ... это базовый C++. Как вы упомянули, функция pFlightPlanTTGReadout->update принимает параметр int и вы передаете что-то, что НЕ int и не может быть неявно преобразовано в int.

В исходном pFlightPlanETAReadout->update(fpETA) есть параметр функции также int? Если,

  • одна возможность заключается в том, что DateTimeAndZone в исходном коде есть оператор преобразования из DateTimeAndZone в int.
  • Другая возможность заключается в том, что исходный код имеет перегруженную функцию update, которая принимает в качестве параметра DateTimeAndZone.
+0

Нет, как упоминалось в моем OP, в исходном 'pFlightPlanETAReadout-> update (fpETA); 'paramater имеет тот же тип, что и тот, который я пытаюсь передать функции, то есть' DateTimeAndZone' ... Я не вижу перегруженной функции где угодно, и если я щелкнул правой кнопкой мыши по функции звоните, и нажмите «Перейти в Defintion», это тот, который он принимает меня ... – someone2088

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