Ошибки кросс-компиляции Visual studio C ++ - PullRequest
0 голосов
/ 12 февраля 2019

Я недавно преобразовал свое приложение Windows C ++ в приложение Linux c ++ и использую подсистему Windows с Debian для кросс-компиляции в Linux.Однако я получаю следующую ошибку, используя библиотеку json: nlohmann

no match for 'operator-' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<double> >::value_type {aka double}' and 'nlohmann::basic_json<>::value_type {aka nlohmann::basic_json<>}')

Я получаю эту ошибку везде , где я использую оператор между элементом json идвойник например.Как пример:

MSE_total += pow(ref.z[j*multiplier] - actual[j]["z"], 2) / pow(ref.z[j*multiplier], 2);

Это строка, которая дает ошибку выше.Должен ли я четко указать, какой тип переменной в json?И как мне это сделать?

1 Ответ

0 голосов
/ 12 февраля 2019

Там нет operator-, принимая nlohmann::basic_json.Тогда я предполагаю, что

ref.z[j*multiplier] - actual[j]["z"]

ожидает, что actual[j]["z"] будет конвертировано в double через его operator ValueType() ... и должно (бросить type_error.302 в случае базовогонесоответствие типов).

Почему это не так?Моя ставка на номер версии nson от nlohmann, отличающийся от ваших сборок windows и linux.

Обходной путь: приведите это значение к двойному (actual[j]["z"].get<double>()).

...