問題タブ [cliext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - STL / CLRライブラリはIComparableを使用して==演算子を実装し、NullReferenceExceptionをスローします
IComparable
インターフェイスを実装していない.NETクラスがありました。このクラスにインターフェイスを実装した後IComparable
、クラスを使用するいくつかのC ++コードによって、予期しない動作が変更されました。今それは投げますNullReferenceException
}
問題は、実装を使用して操作を実行しif (nullptr == unitNames[i])
始めた行にありました。IComparable
==
その理由は、cliext
ユーティリティヘッダーファイルからのテンプレートでした。
質問1:_Left
私はC ++の専門家ではないので、この実装がメソッドを呼び出す前にnullチェックを実行しない理由を誰かが説明できますCompareTo()
か?Equals()とOperator ==のオーバーロードに関するMSDNガイドラインによると内で何かを実行する前にnullチェックを実行する必要があります==
。
質問2:そのような予測できない動作につながる使用法の欠陥はおそらくありますか?
c++ - Visual C++ でのリンカー エラー 2022
次のヘッダー ファイル (data.h) があります。
および次の cpp ファイル (data.cpp):
これにより、次のリンカ エラーが発生します。
これは、戻り値の型として cliext::vector を使用しようとしているときにのみ発生します。このエラーは、 std::vector< std::string > を戻り値の型として使用しているときに消えますが、 String^ のベクトルを返したいです。このエラーの原因がわかりません。このエラーは、cliext::vector を戻り値の型として使用する場合にのみ発生します。一般的な処理に使用すると、正常に動作します。
.net - cliext を介した C++CLI .NET および STL との互換性の問題
私は単純なWindows::Forms
GUI に取り組んでおり、STL を使用してパッケージを使用しようとすると、いくつかの問題が発生vector
しpair
ますcliext
。基本的に、基礎となるcliext::vector< cliext::pair<A, B> >
. 私は今のところ効率をまったく気にしません。そのすべてのインスタンスはほんの一握りのエントリしか保持しないので、単純な線形検索は問題になりません。
Windows::Forms
しかし、インスタンス内でこれらのマップを使用したいので、マネージド クラスにしました。問題は、マップの個々のエントリを変更する方法がわからないことです。
これが基本的なインターフェースです(簡潔にするために関数定義をここに置きます):
どちらのSetInternal
アプローチも機能しません。イテレータのアプローチでは、「最初の左はクラス/構造体/共用体でなければなりません..もしかして->」というコンパイルエラーが表示されますが、Visual Studioはすでにそれが間違っていると言っているので、それは私には意味がありません使用 -> と使用する場合。IntelliSense では、一覧に "最初" と "2 番目" も表示されます。
直接的なアプローチも機能しません。コンパイルして実行しますが、実際にはペアの値を変更しません (true が返された場合でも!)。
さらに、実際には正常に動作するため、SetExternal 関数を含めました。bmap
これは、インデックスによるベクトルの検索が正常に機能し、条件付き onbmap[i]
が正常であり、外部変数を設定できることを示しています。
SetInternal
ベクター内の個々のペアを変更するメソッドを作成する方法について何か考えはありますか? また、bimap を外部で反復処理する方法も必要であり、const イテレータを使用したかった (つまり、const イテレータを基になる の開始と終了に返すメンバー メソッドを使用したいbmap
) が、それを外部で使用して逆参照しようとすると、 iteratorSetInternalByLeftWithIterator
上記のメソッドで反復子を逆参照しようとしたときと同じエラーが発生します。
ありがとうございました!