我有一些简单的C++代码,它们不会被C++ Builder 10.1 Berlin的基于Clang的C++ 11编译器bccaarm编译。

这是代码:

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

这是错误:



编译器在文件STL_iterator.h中的第963行停止:

android - 使用TObject后代调用std::vector::push_back时,C&#43;&#43; Builder bccarm错误-LMLPHP

其他C++编译器bcc32和bcc32c(也基于Clang)对此代码没有问题。

如果不是Comp类型的TComponentTObject类型的另一个后代,则代码可以毫无问题地进行编译。

我不知道这段代码有什么问题以及为什么R和L值有问题...

有人知道在这里做什么吗?

最佳答案

为了编译以上代码,必须将 vector 类型定义为不安全的指针。

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

我为另一个问题打开了支持案例。 embarcadero的支持为我提供了以下信息,该信息适用于该问题,并且似乎有效:



有关此主题的更多信息:

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

关于android - 使用TObject后代调用std::vector::push_back时,C++ Builder bccarm错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37134861/

10-10 14:46