0
Я создаю простой компилятор в C++/CLI для создания простого кода иль ... но, когда я пытаюсь построить компилятор, компилятор возвращает этот ERRO:Неправильный тип преобразования в отражении испускают
1>------ Build started: Project: dnccpp, Configuration: Debug Win32 ------
1> CodeGen.cpp
1>CodeGen.cpp(159): error C2664: 'void System::Reflection::Emit::ILGenerator::Emit(System::Reflection::Emit::OpCode,System::Reflection::Emit::LocalBuilder ^)' : cannot convert argument 2 from 'System::Int32 ^' to 'unsigned char'
1> No user-defined-conversion operator available, or
1> There is no context in which this conversion is possible
1>CodeGen.cpp(161): error C2664: 'void System::Reflection::Emit::ILGenerator::Emit(System::Reflection::Emit::OpCode,System::Reflection::Emit::LocalBuilder ^)' : cannot convert argument 2 from 'System::Double ^' to 'unsigned char'
1> No user-defined-conversion operator available, or
1> There is no context in which this conversion is possible
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========
Я не могу использовать «неподписанный символ» в аргументе, компилятор генерирует неправильный код для этого ...
void CodeGenerator::GenExpr(Expr^ expr, Type^ expectedType, ILGenerator^ il, array<Type^>^ argTypes)
{
Type^ deliveredType;
if (dynamic_cast<Literal^>(expr) != nullptr)
{
Object^ val = ((Literal^)expr)->value;
deliveredType = val->GetType();
if (dynamic_cast<String^>(val) != nullptr)
il->Emit(OpCodes::Ldstr, (String^)val);
else if (dynamic_cast<Int32^>(val) != nullptr)
il->Emit(OpCodes::Ldc_I4, (int^)val);
else if (dynamic_cast<Double^>(val) != nullptr)
il->Emit(OpCodes::Ldc_R8, (double^)val);
}
}
спасибо! – Alexandre