android — C ++ Builder ошибка bccarm при вызове std :: vector :: push_back с потомком TObject

У меня есть простой код C ++, который не будет компилироваться компилятором C ++ 11 на основе Clang bccaarm из C ++ Builder 10.1 Berlin.

Это код:

TComponent* Comp = new TComponent(this);
std::vector<TComponent*> Comps;
Comps.push_back(Comp);

И это ошибка:

[bccaarm error] stl_iterator.h (963): ссылка на тип значения
‘value_type’ (он же ‘System: classes :: TComponent * __strong’) не может быть
привязан к lvalue типа ‘__borland_class * isTObj __strong’ (он же
‘System :: Classes :: TComponent * __strong’)

Компилятор останавливается на строке 963 в файле stl_iterator.h:

Снимок экрана IDE

Другие компиляторы C ++ bcc32 и bcc32c (также основанные на Clang) не имеют проблем с этим кодом.

когда Compне из типа TComponent или другой потомок из TObject код компилируется без проблем.

Я понятия не имею, что не так с этим кодом и почему существует проблема со значениями R и L …

Кто-нибудь знает, что здесь делать?

0

Решение

Чтобы получить скомпилированный код выше, тип вектора должен быть определен как небезопасный указатель

TComponent* Comp = new TComponent(this);
std::vector<__unsafe TComponent*> Comps;
Comps.push_back(Comp);

Я открыл случай поддержки для другой проблемы, которая у меня была. Поддержка embarcadero дала мне следующую информацию, которую я применил к этой проблеме, и она работает:

__unsafe сообщает компилятору, что время жизни объекта будет обработано, и для объектов не будет создан код ARC

Подробнее об этой теме:

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Automatic_Reference_Counting_in_C%2B%2B#weak_and_unsafe_pointers

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector