我有一些简单的 C++ 代码,无法由 C++ Builder 10.1 Berlin 的基于 Clang 的 C++11 编译器 bccaarm 编译。
这是代码:
TComponent* Comp = new TComponent(this);
std::vector<TComponent*> Comps;
Comps.push_back(Comp);
这是错误:
[bccaarm 错误] stl_iterator.h(963):对类型的右值引用
'value_type'(又名'System:classes::TComponent * __strong')不能
绑定到 '__borland_class * isTObj __strong' 类型的左值(又名
'系统::类::TComponent * __strong')
编译器在文件 stl_iterator.h 的第 963 行停止:
其他 C++ 编译器 bcc32 和 bcc32c(也基于 Clang)对此代码没有问题。
When Comp
不是来自类型TComponent
或另一个后代TObject
代码编译没有任何问题。
我不知道这段代码有什么问题以及为什么 R 和 L 值有问题......
有人知道在这里做什么吗?
要编译上述代码,必须将向量类型定义为不安全指针。
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)