Странная ошибка при использовании C ++ / CLI - Невозможно преобразовать тип параметра в тот же тип параметра - PullRequest
1 голос
/ 25 августа 2011

У меня есть следующий код:

vlib_stage_decoding_config_t Decoder::CfgTransform(const DecodingConfig config)
{
    vlib_stage_decoding_config_t cfg;
    return cfg;
}

void Decoder::OpenDecode(const DecodingConfig config)
{
    vlib_stage_decoding_config_t int_cfg = CfgTransform(config);
    vlib_stage_decoding_open(&int_cfg);
}

Заголовочный файл:

public ref struct DecodingConfig
{
};

Я получаю следующую ошибку:

Ошибка 1 ошибкаC2664: 'Video::Decoding::Decoder::CfgTransform': невозможно преобразовать параметр 1 из 'const Video::Decoding::DecodingConfig' в 'const Video::Decoding::DecodingConfig' decoder.cpp

Это довольно бессмысленно для меня.Есть идеи?

1 Ответ

2 голосов
/ 25 августа 2011

Попробуйте:

vlib_stage_decoding_config_t Decoder::CfgTransform(DecodingConfig^ config)
{
    vlib_stage_decoding_config_t cfg;
    return cfg;
}

void Decoder::OpenDecode(DecodingConfig^ config)
{
    vlib_stage_decoding_config_t int_cfg = CfgTransform(config);
    vlib_stage_decoding_open(&int_cfg);
}
  1. const не имеет смысла для управляемых типов.
  2. Несмотря на то, что вы используете struct, DecodingConfig является ссылочным типом, а нетип значения, поэтому его нельзя передать без дескриптора отслеживания или ссылки отслеживания.Если вы хотите, чтобы DecodingConfig был типом значения, используйте value struct вместо ref struct и избавьтесь от ^ s в аргументах вашей функции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...