1

C++ Builder 10.1 Berlin の Clang ベースの C++11 コンパイラ bccaarm ではコンパイルできない単純な C++ コードがいくつかあります。

これはコードです:

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' (別名 'System: :Classes::TComponent * __strong')

コンパイラは、ファイル stl_iterator.h の 963 行目で停止します。

IDE のスクリーンショット

他の C++ コンパイラ bcc32 および bcc32c (これも Clang ベース) では、このコードに問題はありません。

CompタイプTComponentまたはコードからの別の子孫からではない場合TObject、問題なくコンパイルされます。

このコードの何が問題なのか、なぜ R 値と L 値に問題があるのか​​ わかりません...

ここで何をすべきか知っている人はいますか?

4

1 に答える 1

1

上記のコードをコンパイルするには、ベクトル型をアンセーフ ポインターとして定義する必要があります。

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

別の問題についてサポートケースをオープンしました。エンバカデロのサポートは、この問題に適用した次の情報を提供してくれました。

__unsafeオブジェクトの有効期間が処理され、オブジェクトの ARC コードが生成されないことをコンパイラに通知します。

このトピックの詳細:

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

于 2016-06-06T12:11:34.863 に答える